瀏覽代碼

Fix additional material caches issue

David Catuhe 5 年之前
父節點
當前提交
a1c73d4305

+ 3 - 7
materialsLibrary/src/cell/cellMaterial.ts

@@ -74,8 +74,6 @@ export class CellMaterial extends PushMaterial {
     @expandToProperty("_markAllSubMeshesAsLightsDirty")
     public maxSimultaneousLights: number;
 
-    private _renderId: number;
-
     constructor(name: string, scene: Scene) {
         super(name, scene);
     }
@@ -107,10 +105,8 @@ export class CellMaterial extends PushMaterial {
         var defines = <CellMaterialDefines>subMesh._materialDefines;
         var scene = this.getScene();
 
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (this._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();
@@ -220,7 +216,7 @@ export class CellMaterial extends PushMaterial {
             return false;
         }
 
-        this._renderId = scene.getRenderId();
+        defines._renderId = scene.getRenderId();
         subMesh.effect._wasPreviouslyReady = true;
 
         return true;

+ 3 - 6
materialsLibrary/src/fire/fireMaterial.ts

@@ -69,7 +69,6 @@ export class FireMaterial extends PushMaterial {
     public speed = 1.0;
 
     private _scaledDiffuse = new Color3();
-    private _renderId: number;
     private _lastTime: number = 0;
 
     constructor(name: string, scene: Scene) {
@@ -103,10 +102,8 @@ export class FireMaterial extends PushMaterial {
         var defines = <FireMaterialDefines>subMesh._materialDefines;
         var scene = this.getScene();
 
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (this._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();
@@ -202,7 +199,7 @@ export class FireMaterial extends PushMaterial {
             return false;
         }
 
-        this._renderId = scene.getRenderId();
+        defines._renderId = scene.getRenderId();
         subMesh.effect._wasPreviouslyReady = true;
 
         return true;

+ 2 - 6
materialsLibrary/src/fur/furMaterial.ts

@@ -111,8 +111,6 @@ export class FurMaterial extends PushMaterial {
 
     public _meshes: AbstractMesh[];
 
-    private _renderId: number;
-
     private _furTime: number = 0;
 
     constructor(name: string, scene: Scene) {
@@ -173,10 +171,8 @@ export class FurMaterial extends PushMaterial {
         var defines = <FurMaterialDefines>subMesh._materialDefines;
         var scene = this.getScene();
 
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (this._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();

+ 3 - 7
materialsLibrary/src/gradient/gradientMaterial.ts

@@ -82,8 +82,6 @@ export class GradientMaterial extends PushMaterial {
     @expandToProperty("_markAllSubMeshesAsLightsDirty")
     public disableLighting: boolean;
 
-    private _renderId: number;
-
     constructor(name: string, scene: Scene) {
         super(name, scene);
     }
@@ -115,10 +113,8 @@ export class GradientMaterial extends PushMaterial {
         var defines = <GradientMaterialDefines>subMesh._materialDefines;
         var scene = this.getScene();
 
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (this._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();
@@ -212,7 +208,7 @@ export class GradientMaterial extends PushMaterial {
             return false;
         }
 
-        this._renderId = scene.getRenderId();
+        defines._renderId = scene.getRenderId();
         subMesh.effect._wasPreviouslyReady = true;
 
         return true;

+ 3 - 7
materialsLibrary/src/grid/gridMaterial.ts

@@ -92,8 +92,6 @@ export class GridMaterial extends PushMaterial {
 
     private _gridControl: Vector4 = new Vector4(this.gridRatio, this.majorUnitFrequency, this.minorUnitVisibility, this.opacity);
 
-    private _renderId: number;
-
     /**
      * constructor
      * @param name The name given to the material in order to identify it afterwards.
@@ -128,10 +126,8 @@ export class GridMaterial extends PushMaterial {
         var defines = <GridMaterialDefines>subMesh._materialDefines;
         var scene = this.getScene();
 
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (this._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         if (defines.TRANSPARENT !== (this.opacity < 1.0)) {
@@ -199,7 +195,7 @@ export class GridMaterial extends PushMaterial {
             return false;
         }
 
-        this._renderId = scene.getRenderId();
+        defines._renderId = scene.getRenderId();
         subMesh.effect._wasPreviouslyReady = true;
 
         return true;

+ 3 - 6
materialsLibrary/src/lava/lavaMaterial.ts

@@ -134,7 +134,6 @@ export class LavaMaterial extends PushMaterial {
     public maxSimultaneousLights: number;
 
     private _scaledDiffuse = new Color3();
-    private _renderId: number;
 
     constructor(name: string, scene: Scene) {
         super(name, scene);
@@ -167,10 +166,8 @@ export class LavaMaterial extends PushMaterial {
         var defines = <LavaMaterialDefines>subMesh._materialDefines;
         var scene = this.getScene();
 
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (this._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();
@@ -286,7 +283,7 @@ export class LavaMaterial extends PushMaterial {
             return false;
         }
 
-        this._renderId = scene.getRenderId();
+        defines._renderId = scene.getRenderId();
         subMesh.effect._wasPreviouslyReady = true;
 
         return true;

+ 3 - 6
materialsLibrary/src/mix/mixMaterial.ts

@@ -132,7 +132,6 @@ export class MixMaterial extends PushMaterial {
     @expandToProperty("_markAllSubMeshesAsLightsDirty")
     public maxSimultaneousLights: number;
 
-    private _renderId: number;
 
     constructor(name: string, scene: Scene) {
         super(name, scene);
@@ -165,10 +164,8 @@ export class MixMaterial extends PushMaterial {
         var defines = <MixMaterialDefines>subMesh._materialDefines;
         var scene = this.getScene();
 
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (this._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();
@@ -317,7 +314,7 @@ export class MixMaterial extends PushMaterial {
             return false;
         }
 
-        this._renderId = scene.getRenderId();
+        defines._renderId = scene.getRenderId();
         subMesh.effect._wasPreviouslyReady = true;
 
         return true;

+ 3 - 7
materialsLibrary/src/normal/normalMaterial.ts

@@ -106,8 +106,6 @@ export class NormalMaterial extends PushMaterial {
     @expandToProperty("_markAllSubMeshesAsLightsDirty")
     public maxSimultaneousLights: number;
 
-    private _renderId: number;
-
     constructor(name: string, scene: Scene) {
         super(name, scene);
     }
@@ -143,10 +141,8 @@ export class NormalMaterial extends PushMaterial {
         var defines = <NormalMaterialDefines>subMesh._materialDefines;
         var scene = this.getScene();
 
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (this._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();
@@ -254,7 +250,7 @@ export class NormalMaterial extends PushMaterial {
             return false;
         }
 
-        this._renderId = scene.getRenderId();
+        defines._renderId = scene.getRenderId();
         subMesh.effect._wasPreviouslyReady = true;
 
         return true;

+ 3 - 6
materialsLibrary/src/shadowOnly/shadowOnlyMaterial.ts

@@ -40,7 +40,6 @@ class ShadowOnlyMaterialDefines extends MaterialDefines {
 }
 
 export class ShadowOnlyMaterial extends PushMaterial {
-    private _renderId: number;
     private _activeLight: IShadowLight;
 
     constructor(name: string, scene: Scene) {
@@ -84,10 +83,8 @@ export class ShadowOnlyMaterial extends PushMaterial {
         var defines = <ShadowOnlyMaterialDefines>subMesh._materialDefines;
         var scene = this.getScene();
 
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (this._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();
@@ -184,7 +181,7 @@ export class ShadowOnlyMaterial extends PushMaterial {
             return false;
         }
 
-        this._renderId = scene.getRenderId();
+        defines._renderId = scene.getRenderId();
         subMesh.effect._wasPreviouslyReady = true;
 
         return true;

+ 3 - 7
materialsLibrary/src/simple/simpleMaterial.ts

@@ -66,8 +66,6 @@ export class SimpleMaterial extends PushMaterial {
     @expandToProperty("_markAllSubMeshesAsLightsDirty")
     public maxSimultaneousLights: number;
 
-    private _renderId: number;
-
     constructor(name: string, scene: Scene) {
         super(name, scene);
     }
@@ -99,10 +97,8 @@ export class SimpleMaterial extends PushMaterial {
         var defines = <SimpleMaterialDefines>subMesh._materialDefines;
         var scene = this.getScene();
 
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (this._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();
@@ -209,7 +205,7 @@ export class SimpleMaterial extends PushMaterial {
             return false;
         }
 
-        this._renderId = scene.getRenderId();
+        defines._renderId = scene.getRenderId();
         subMesh.effect._wasPreviouslyReady = true;
 
         return true;

+ 3 - 7
materialsLibrary/src/sky/skyMaterial.ts

@@ -115,8 +115,6 @@ export class SkyMaterial extends PushMaterial {
     // Private members
     private _cameraPosition: Vector3 = Vector3.Zero();
 
-    private _renderId: number;
-
     /**
      * Instantiates a new sky material.
      * This material allows to create dynamic and texture free
@@ -175,10 +173,8 @@ export class SkyMaterial extends PushMaterial {
         var defines = <SkyMaterialDefines>subMesh._materialDefines;
         var scene = this.getScene();
 
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (this._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         MaterialHelper.PrepareDefinesForMisc(mesh, scene, false, this.pointsCloud, this.fogEnabled, false, defines);
@@ -223,7 +219,7 @@ export class SkyMaterial extends PushMaterial {
             return false;
         }
 
-        this._renderId = scene.getRenderId();
+        defines._renderId = scene.getRenderId();
         subMesh.effect._wasPreviouslyReady = true;
 
         return true;

+ 3 - 7
materialsLibrary/src/terrain/terrainMaterial.ts

@@ -105,8 +105,6 @@ export class TerrainMaterial extends PushMaterial {
     @expandToProperty("_markAllSubMeshesAsLightsDirty")
     public maxSimultaneousLights: number;
 
-    private _renderId: number;
-
     constructor(name: string, scene: Scene) {
         super(name, scene);
     }
@@ -138,10 +136,8 @@ export class TerrainMaterial extends PushMaterial {
         var defines = <TerrainMaterialDefines>subMesh._materialDefines;
         var scene = this.getScene();
 
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (this._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();
@@ -276,7 +272,7 @@ export class TerrainMaterial extends PushMaterial {
             return false;
         }
 
-        this._renderId = scene.getRenderId();
+        defines._renderId = scene.getRenderId();
         subMesh.effect._wasPreviouslyReady = true;
 
         return true;

+ 3 - 7
materialsLibrary/src/triPlanar/triPlanarMaterial.ts

@@ -110,8 +110,6 @@ export class TriPlanarMaterial extends PushMaterial {
     @expandToProperty("_markAllSubMeshesAsLightsDirty")
     public maxSimultaneousLights: number;
 
-    private _renderId: number;
-
     constructor(name: string, scene: Scene) {
         super(name, scene);
     }
@@ -143,10 +141,8 @@ export class TriPlanarMaterial extends PushMaterial {
         var defines = <TriPlanarMaterialDefines>subMesh._materialDefines;
         var scene = this.getScene();
 
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (this._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();
@@ -268,7 +264,7 @@ export class TriPlanarMaterial extends PushMaterial {
             return false;
         }
 
-        this._renderId = scene.getRenderId();
+        defines._renderId = scene.getRenderId();
         subMesh.effect._wasPreviouslyReady = true;
 
         return true;

+ 3 - 7
materialsLibrary/src/water/waterMaterial.ts

@@ -199,8 +199,6 @@ export class WaterMaterial extends PushMaterial {
     private _lastTime: number = 0;
     private _lastDeltaTime: number = 0;
 
-    private _renderId: number;
-
     private _useLogarithmicDepth: boolean;
 
     private _waitingRenderList: Nullable<string[]>;
@@ -316,10 +314,8 @@ export class WaterMaterial extends PushMaterial {
         var defines = <WaterMaterialDefines>subMesh._materialDefines;
         var scene = this.getScene();
 
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (this._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();
@@ -483,7 +479,7 @@ export class WaterMaterial extends PushMaterial {
             return false;
         }
 
-        this._renderId = scene.getRenderId();
+        defines._renderId = scene.getRenderId();
         subMesh.effect._wasPreviouslyReady = true;
 
         return true;

+ 3 - 4
src/Materials/Background/backgroundMaterial.ts

@@ -665,10 +665,9 @@ export class BackgroundMaterial extends PushMaterial {
 
         var scene = this.getScene();
         var defines = <BackgroundMaterialDefines>subMesh._materialDefines;
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (defines._renderId === scene.getRenderId()) {
-                return true;
-            }
+        
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();

+ 2 - 4
src/Materials/Node/nodeMaterial.ts

@@ -730,10 +730,8 @@ export class NodeMaterial extends PushMaterial {
         }
 
         var defines = <NodeMaterialDefines>subMesh._materialDefines;
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (defines._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();

+ 2 - 4
src/Materials/PBR/pbrBaseMaterial.ts

@@ -880,10 +880,8 @@ export abstract class PBRBaseMaterial extends PushMaterial {
         }
 
         const defines = <PBRMaterialDefines>subMesh._materialDefines;
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (defines._renderId === this.getScene().getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         const scene = this.getScene();

+ 13 - 0
src/Materials/pushMaterial.ts

@@ -5,6 +5,7 @@ import { AbstractMesh } from "../Meshes/abstractMesh";
 import { Mesh } from "../Meshes/mesh";
 import { Material } from "../Materials/material";
 import { Effect } from "../Materials/effect";
+import { SubMesh } from '../Meshes/subMesh';
 /**
  * Base class of materials working in push mode in babylon JS
  * @hidden
@@ -43,6 +44,18 @@ export class PushMaterial extends Material {
         return this.isReadyForSubMesh(mesh, mesh.subMeshes[0], useInstances);
     }
 
+    protected _isReadyForSubMesh(subMesh: SubMesh) {
+        const defines = subMesh._materialDefines;
+        if (!this.checkReadyOnEveryCall && subMesh.effect && defines) {
+            if (defines._renderId === this.getScene().getRenderId()) {
+                    return true;
+            }
+        }
+
+        return false;
+    }
+
+
     /**
     * Binds the given world matrix to the active effect
     *

+ 2 - 4
src/Materials/standardMaterial.ts

@@ -799,10 +799,8 @@ export class StandardMaterial extends PushMaterial {
 
         var scene = this.getScene();
         var defines = <StandardMaterialDefines>subMesh._materialDefines;
-        if (!this.checkReadyOnEveryCall && subMesh.effect) {
-            if (defines._renderId === scene.getRenderId()) {
-                return true;
-            }
+        if (this._isReadyForSubMesh(subMesh)) {
+            return true;
         }
 
         var engine = scene.getEngine();