Просмотр исходного кода

Create a single instance of the line shader

Popov72 5 лет назад
Родитель
Сommit
e425ea072f
1 измененных файлов с 19 добавлено и 9 удалено
  1. 19 9
      src/Rendering/edgesRenderer.ts

+ 19 - 9
src/Rendering/edgesRenderer.ts

@@ -3,7 +3,7 @@ import { VertexBuffer } from "../Meshes/buffer";
 import { AbstractMesh } from "../Meshes/abstractMesh";
 import { LinesMesh, InstancedLinesMesh } from "../Meshes/linesMesh";
 import { Vector3, TmpVectors } from "../Maths/math.vector";
-import { IDisposable } from "../scene";
+import { IDisposable, Scene } from "../scene";
 import { Observer } from "../Misc/observable";
 import { Effect } from "../Materials/effect";
 import { Material } from "../Materials/material";
@@ -149,6 +149,23 @@ export class EdgesRenderer implements IEdgesRenderer {
     /** Gets or sets a boolean indicating if the edgesRenderer is active */
     public isEnabled = true;
 
+    private static _LineShader: ShaderMaterial;
+
+    private static GetShader(scene: Scene): ShaderMaterial {
+        if (!EdgesRenderer._LineShader) {
+            EdgesRenderer._LineShader = new ShaderMaterial("lineShader", scene, "line",
+                {
+                    attributes: ["position", "normal"],
+                    uniforms: ["world", "viewProjection", "color", "width", "aspectRatio"]
+                });
+
+            EdgesRenderer._LineShader.disableDepthWrite = true;
+            EdgesRenderer._LineShader.backFaceCulling = false;
+        }
+
+        return EdgesRenderer._LineShader;
+    }
+
     /**
      * Creates an instance of the EdgesRenderer. It is primarily use to display edges of a mesh.
      * Beware when you use this class with complex objects as the adjacencies computation can be really long
@@ -182,14 +199,7 @@ export class EdgesRenderer implements IEdgesRenderer {
             return;
         }
 
-        this._lineShader = new ShaderMaterial("lineShader", this._source.getScene(), "line",
-            {
-                attributes: ["position", "normal"],
-                uniforms: ["worldViewProjection", "color", "width", "aspectRatio"]
-            });
-
-        this._lineShader.disableDepthWrite = true;
-        this._lineShader.backFaceCulling = false;
+        this._lineShader = EdgesRenderer.GetShader(this._source.getScene());
     }
 
     /** @hidden */