Browse Source

New attempt at avoiding duplicate computation in WebGLRenderer.compile

Elias Hasle 5 years ago
parent
commit
1c70f8928c
1 changed files with 10 additions and 2 deletions
  1. 10 2
      src/renderers/WebGLRenderer.js

+ 10 - 2
src/renderers/WebGLRenderer.js

@@ -1055,6 +1055,8 @@ function WebGLRenderer( parameters ) {
 
 		currentRenderState.setupLights( camera );
 
+		var visited = {};
+
 		scene.traverse( function ( object ) {
 
 			if ( object.material ) {
@@ -1063,13 +1065,19 @@ function WebGLRenderer( parameters ) {
 
 					for ( var i = 0; i < object.material.length; i ++ ) {
 
-						initMaterial( object.material[ i ], scene, object );
+						if ( ! visited[ object.material[ i ].uuid ] ) {
+
+							initMaterial( object.material[ i ], scene, object );
+							visited[ object.material[ i ].uuid ] = true;
+
+						}
 
 					}
 
-				} else {
+				} else if ( ! visited[ object.material.uuid ] ) {
 
 					initMaterial( object.material, scene, object );
+					visited[ object.material.uuid ] = true;
 
 				}