Browse Source

Switch order of camera/object iteration in renderObjects for multi-camera scenarios. (#22123)

davehill00 4 years ago
parent
commit
5c90688751
1 changed files with 25 additions and 14 deletions
  1. 25 14
      src/renderers/WebGLRenderer.js

+ 25 - 14
src/renderers/WebGLRenderer.js

@@ -1275,28 +1275,28 @@ function WebGLRenderer( parameters = {} ) {
 
 		const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;
 
-		for ( let i = 0, l = renderList.length; i < l; i ++ ) {
+		if ( camera.isArrayCamera ) {
 
-			const renderItem = renderList[ i ];
+			const cameras = camera.cameras;
 
-			const object = renderItem.object;
-			const geometry = renderItem.geometry;
-			const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
-			const group = renderItem.group;
+			for ( let i = 0, l = cameras.length; i < l; i ++ ) {
 
-			if ( camera.isArrayCamera ) {
+				const camera2 = cameras[ i ];
 
-				const cameras = camera.cameras;
+				state.viewport( _currentViewport.copy( camera2.viewport ) );
 
-				for ( let j = 0, jl = cameras.length; j < jl; j ++ ) {
+				currentRenderState.setupLightsView( camera2 );
 
-					const camera2 = cameras[ j ];
+				for ( let j = 0, jl = renderList.length; j < jl; j ++ ) {
 
-					if ( object.layers.test( camera2.layers ) ) {
+					const renderItem = renderList[ j ];
 
-						state.viewport( _currentViewport.copy( camera2.viewport ) );
+					const object = renderItem.object;
+					const geometry = renderItem.geometry;
+					const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
+					const group = renderItem.group;
 
-						currentRenderState.setupLightsView( camera2 );
+					if ( object.layers.test( camera2.layers ) ) {
 
 						renderObject( object, scene, camera2, geometry, material, group );
 
@@ -1304,7 +1304,18 @@ function WebGLRenderer( parameters = {} ) {
 
 				}
 
-			} else {
+			}
+
+		} else {
+
+			for ( let j = 0, jl = renderList.length; j < jl; j ++ ) {
+
+				const renderItem = renderList[ j ];
+
+				const object = renderItem.object;
+				const geometry = renderItem.geometry;
+				const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
+				const group = renderItem.group;
 
 				renderObject( object, scene, camera, geometry, material, group );