Bladeren bron

Associated with #1961

David Catuhe 8 jaren geleden
bovenliggende
commit
116641d62a

File diff suppressed because it is too large
+ 17 - 17
dist/preview release/babylon.core.js


File diff suppressed because it is too large
+ 3619 - 3617
dist/preview release/babylon.d.ts


File diff suppressed because it is too large
+ 25 - 25
dist/preview release/babylon.js


+ 15 - 5
dist/preview release/babylon.max.js

@@ -20536,6 +20536,9 @@ var BABYLON;
         Scene.prototype.getCachedMaterial = function () {
             return this._cachedMaterial;
         };
+        Scene.prototype.getCachedEffect = function () {
+            return this._cachedEffect;
+        };
         Scene.prototype.getBoundingBoxRenderer = function () {
             return this._boundingBoxRenderer;
         };
@@ -21150,6 +21153,7 @@ var BABYLON;
         };
         Scene.prototype.resetCachedMaterial = function () {
             this._cachedMaterial = null;
+            this._cachedEffect = null;
         };
         Scene.prototype.registerBeforeRender = function (func) {
             this.onBeforeRenderObservable.add(func);
@@ -30049,6 +30053,8 @@ var BABYLON;
             var needRebuild = false;
             var needShadows = false;
             var lightmapMode = false;
+            var shadowEnabled = false;
+            var specularEnabled = false;
             if (scene.lightsEnabled && !disableLighting) {
                 for (var _i = 0, _a = mesh._lightSources; _i < _a.length; _i++) {
                     var light = _a[_i];
@@ -30075,9 +30081,10 @@ var BABYLON;
                     }
                     defines[type] = true;
                     // Specular
-                    defines["SPECULARTERM"] = (!light.specular.equalsFloats(0, 0, 0) && defines["SPECULARTERM"] !== undefined);
+                    if (!light.specular.equalsFloats(0, 0, 0)) {
+                        specularEnabled = true;
+                    }
                     // Shadows
-                    var shadowEnabled = false;
                     if (scene.shadowsEnabled) {
                         var shadowGenerator = light.getShadowGenerator();
                         if (mesh && mesh.receiveShadows && shadowGenerator) {
@@ -30104,7 +30111,6 @@ var BABYLON;
                             defines["SHADOW" + lightIndex] = false;
                         }
                     }
-                    defines["SHADOWS"] = shadowEnabled;
                     if (light.lightmapMode != BABYLON.Light.LIGHTMAP_DEFAULT) {
                         lightmapMode = true;
                         if (!needRebuild && defines["LIGHTMAPEXCLUDED" + lightIndex] === undefined) {
@@ -30125,6 +30131,8 @@ var BABYLON;
                         break;
                 }
             }
+            defines["SPECULARTERM"] = specularEnabled;
+            defines["SHADOWS"] = shadowEnabled;
             // Resetting all other lights if any
             for (var index = lightIndex; index < maxSimultaneousLights; index++) {
                 if (defines["LIGHT" + index] !== undefined) {
@@ -30710,6 +30718,7 @@ var BABYLON;
             }
         };
         Material.prototype.bindForSubMesh = function (world, mesh, subMesh) {
+            this._scene._cachedEffect = subMesh.effect;
         };
         Material.prototype.bindOnlyWorldMatrix = function (world) {
         };
@@ -31886,7 +31895,7 @@ var BABYLON;
             this.bindOnlyWorldMatrix(world);
             // Bones
             BABYLON.MaterialHelper.BindBonesParameters(mesh, effect);
-            if (scene.getCachedMaterial() !== this) {
+            if (scene.getCachedEffect() !== effect || scene.getCachedMaterial() !== this) {
                 effect.setMatrix("viewProjection", scene.getTransformMatrix());
                 if (StandardMaterial.FresnelEnabled) {
                     // Fresnel
@@ -31990,7 +31999,7 @@ var BABYLON;
                 }
                 effect.setColor3("vEmissiveColor", this.emissiveColor);
             }
-            if (scene.getCachedMaterial() !== this || !this.isFrozen) {
+            if (!this.isFrozen) {
                 // Diffuse
                 effect.setColor4("vDiffuseColor", this.diffuseColor, this.alpha * mesh.visibility);
                 // Lights
@@ -32010,6 +32019,7 @@ var BABYLON;
                     BABYLON.ColorCurves.Bind(this.cameraColorCurves, effect);
                 }
             }
+            _super.prototype.bindForSubMesh.call(this, world, mesh, subMesh);
             _super.prototype.bind.call(this, world, mesh);
         };
         StandardMaterial.prototype.getAnimatables = function () {

File diff suppressed because it is too large
+ 3619 - 3617
dist/preview release/babylon.module.d.ts


File diff suppressed because it is too large
+ 25 - 25
dist/preview release/babylon.noworker.js


+ 1 - 0
src/Materials/babylon.material.ts

@@ -418,6 +418,7 @@
         }
 
         public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {
+            this._scene._cachedEffect = subMesh.effect;
         }
 
         public bindOnlyWorldMatrix(world: Matrix): void {

+ 8 - 4
src/Materials/babylon.materialHelper.ts

@@ -38,6 +38,8 @@
             var needRebuild = false;
             var needShadows = false;
             var lightmapMode = false;
+            var shadowEnabled = false;
+            var specularEnabled = false;
 
             if (scene.lightsEnabled && !disableLighting) {
                 for (var light of mesh._lightSources) {
@@ -66,10 +68,11 @@
                     defines[type] = true;
 
                     // Specular
-                    defines["SPECULARTERM"] = (!light.specular.equalsFloats(0, 0, 0) && defines["SPECULARTERM"] !== undefined);
+                    if (!light.specular.equalsFloats(0, 0, 0)) {
+                        specularEnabled = true;
+                    }
 
                     // Shadows
-                    var shadowEnabled = false;
                     if (scene.shadowsEnabled) {
                         var shadowGenerator = <ShadowGenerator>light.getShadowGenerator();
                         if (mesh && mesh.receiveShadows && shadowGenerator) {
@@ -101,8 +104,6 @@
                         }
                     }
 
-                    defines["SHADOWS"] = shadowEnabled;
-
                     if (light.lightmapMode != Light.LIGHTMAP_DEFAULT ) {
                         lightmapMode = true;
                         if (!needRebuild && defines["LIGHTMAPEXCLUDED" + lightIndex] === undefined) {
@@ -124,6 +125,9 @@
                 }
             }
 
+            defines["SPECULARTERM"] = specularEnabled;
+            defines["SHADOWS"] = shadowEnabled;
+
             // Resetting all other lights if any
             for (var index = lightIndex; index < maxSimultaneousLights; index++) {
                 if (defines["LIGHT" + index] !== undefined) {

+ 3 - 2
src/Materials/babylon.standardMaterial.ts

@@ -1094,7 +1094,7 @@ module BABYLON {
             // Bones
             MaterialHelper.BindBonesParameters(mesh, effect);
 
-            if (scene.getCachedMaterial() !== this) {
+            if (scene.getCachedEffect() !== effect || scene.getCachedMaterial() !== this) {
                 effect.setMatrix("viewProjection", scene.getTransformMatrix());
 
                 if (StandardMaterial.FresnelEnabled) {
@@ -1226,7 +1226,7 @@ module BABYLON {
                 effect.setColor3("vEmissiveColor", this.emissiveColor);
             }
 
-            if (scene.getCachedMaterial() !== this || !this.isFrozen) {
+            if (!this.isFrozen) {
                 // Diffuse
                 effect.setColor4("vDiffuseColor", this.diffuseColor, this.alpha * mesh.visibility);
 
@@ -1252,6 +1252,7 @@ module BABYLON {
                 }
             }
 
+            super.bindForSubMesh(world, mesh, subMesh);
             super.bind(world, mesh);
         }
 

+ 6 - 0
src/babylon.scene.ts

@@ -647,6 +647,7 @@
         public animationTimeScale: number = 1;
 
         public _cachedMaterial: Material;
+        public _cachedEffect: Effect;
 
         private _renderId = 0;
         private _executeWhenReadyTimeoutId = -1;
@@ -796,6 +797,10 @@
             return this._cachedMaterial;
         }
 
+         public getCachedEffect(): Effect {
+            return this._cachedEffect;
+        }
+
         public getBoundingBoxRenderer(): BoundingBoxRenderer {
             return this._boundingBoxRenderer;
         }
@@ -1468,6 +1473,7 @@
 
         public resetCachedMaterial(): void {
             this._cachedMaterial = null;
+            this._cachedEffect = null;
         }
 
         public registerBeforeRender(func: () => void): void {