瀏覽代碼

Create a shader per scene

Popov72 5 年之前
父節點
當前提交
bb4a0aabe8
共有 1 個文件被更改,包括 15 次插入6 次删除
  1. 15 6
      src/Rendering/edgesRenderer.ts

+ 15 - 6
src/Rendering/edgesRenderer.ts

@@ -151,21 +151,30 @@ 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 _LineShaders: Array<ShaderMaterial> = [];
+    private static _LineShaderScenes: Array<Scene> = [];
 
     private static GetShader(scene: Scene): ShaderMaterial {
-        if (!EdgesRenderer._LineShader) {
-            EdgesRenderer._LineShader = new ShaderMaterial("lineShader", scene, "line",
+        let idx = EdgesRenderer._LineShaderScenes.indexOf(scene);
+
+        if (idx < 0) {
+            EdgesRenderer._LineShaderScenes.push(scene);
+
+            const shader = new ShaderMaterial("lineShader", scene, "line",
                 {
                     attributes: ["position", "normal"],
                     uniforms: ["world", "viewProjection", "color", "width", "aspectRatio"]
                 });
 
-            EdgesRenderer._LineShader.disableDepthWrite = true;
-            EdgesRenderer._LineShader.backFaceCulling = false;
+            shader.disableDepthWrite = true;
+            shader.backFaceCulling = false;
+
+            EdgesRenderer._LineShaders.push(shader);
+
+            idx = EdgesRenderer._LineShaders.length - 1;
         }
 
-        return EdgesRenderer._LineShader;
+        return EdgesRenderer._LineShaders[idx];
     }
 
     /**