瀏覽代碼

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 年之前
父節點
當前提交
970b2eba75
共有 1 個文件被更改,包括 7 次插入9 次删除
  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 );