Browse Source

Fix updating some material properties in initMaterial

Environment or fog can be changed to a different object so that the shader code used to render them doesn't change. In this case we want to update the values on materialProperties so further redundant initMaterial calls are prevented.
Olli Etuaho 5 years ago
parent
commit
970b2eba75
1 changed files with 7 additions and 9 deletions
  1. 7 9
      src/renderers/WebGLRenderer.js

+ 7 - 9
src/renderers/WebGLRenderer.js

@@ -1339,6 +1339,12 @@ function WebGLRenderer( parameters ) {
 		let program = materialProperties.program;
 		let program = materialProperties.program;
 		let programChange = true;
 		let programChange = true;
 
 
+		// always update environment and fog - changing these trigger an initMaterial call, but it's possible that the program doesn't change
+
+		materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;
+		materialProperties.fog = scene.fog;
+		materialProperties.envMap = cubemaps.get( material.envMap || materialProperties.environment );
+
 		if ( program === undefined ) {
 		if ( program === undefined ) {
 
 
 			// new material
 			// new material
@@ -1355,11 +1361,7 @@ function WebGLRenderer( parameters ) {
 
 
 		} else if ( parameters.shaderID !== undefined ) {
 		} else if ( parameters.shaderID !== undefined ) {
 
 
-			// same glsl and uniform list, envMap still needs the update here to avoid a frame-late effect
-
-			const environment = material.isMeshStandardMaterial ? scene.environment : null;
-			materialProperties.envMap = cubemaps.get( material.envMap || environment );
-
+			// same glsl and uniform list
 			return;
 			return;
 
 
 		} else {
 		} else {
@@ -1395,10 +1397,6 @@ function WebGLRenderer( parameters ) {
 
 
 		}
 		}
 
 
-		materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;
-		materialProperties.fog = scene.fog;
-		materialProperties.envMap = cubemaps.get( material.envMap || materialProperties.environment );
-
 		// store the light setup it was created for
 		// store the light setup it was created for
 
 
 		materialProperties.needsLights = materialNeedsLights( material );
 		materialProperties.needsLights = materialNeedsLights( material );