Browse Source

Merge pull request #21020 from higharc/fix-initmaterial-early-return

Fix updating some material properties in initMaterial
Mr.doob 4 years ago
parent
commit
71114ad153
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 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 ) {
 
 			// new material
@@ -1355,11 +1361,7 @@ function WebGLRenderer( parameters ) {
 
 		} 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;
 
 		} 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
 
 		materialProperties.needsLights = materialNeedsLights( material );