浏览代码

WebGLRenderer: Reverted isArrayCamera handling again. Seems like fewer program changes is better than (many) more uniform calls.

Mr.doob 8 年之前
父节点
当前提交
111faafad1
共有 1 个文件被更改,包括 36 次插入42 次删除
  1. 36 42
      src/renderers/WebGLRenderer.js

+ 36 - 42
src/renderers/WebGLRenderer.js

@@ -1257,31 +1257,25 @@ function WebGLRenderer( parameters ) {
 
 		// render scene
 
-		if ( camera.isArrayCamera ) {
-
-			var cameras = camera.cameras;
+		var opaqueObjects = currentRenderList.opaque;
+		var transparentObjects = currentRenderList.transparent;
 
-			for ( var j = 0, jl = cameras.length; j < jl; j ++ ) {
+		if ( scene.overrideMaterial ) {
 
-				var camera2 = cameras[ j ];
-				var bounds = camera2.bounds;
+			var overrideMaterial = scene.overrideMaterial;
 
-				var x = bounds.x * _width;
-				var y = bounds.y * _height;
-				var width = bounds.z * _width;
-				var height = bounds.w * _height;
+			if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial );
+			if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial );
 
-				_this.setViewport( x, y, width, height );
-				_this.setScissor( x, y, width, height );
-				_this.setScissorTest( true );
+		} else {
 
-				renderScene( currentRenderList, scene, camera2 );
+			// opaque pass (front-to-back order)
 
-			}
+			if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera );
 
-		} else {
+			// transparent pass (back-to-front order)
 
-			renderScene( currentRenderList, scene, camera );
+			if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera );
 
 		}
 
@@ -1469,46 +1463,46 @@ function WebGLRenderer( parameters ) {
 
 	}
 
-	function renderScene( renderList, scene, camera ) {
-
-		var opaqueObjects = renderList.opaque;
-		var transparentObjects = renderList.transparent;
-
-		if ( scene.overrideMaterial ) {
+	function renderObjects( renderList, scene, camera, overrideMaterial ) {
 
-			var overrideMaterial = scene.overrideMaterial;
+		for ( var i = 0, l = renderList.length; i < l; i ++ ) {
 
-			if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial );
-			if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial );
+			var renderItem = renderList[ i ];
 
-		} else {
+			var object = renderItem.object;
+			var geometry = renderItem.geometry;
+			var material = overrideMaterial === undefined ? renderItem.material : overrideMaterial;
+			var group = renderItem.group;
 
-			// opaque pass (front-to-back order)
+			object.onBeforeRender( _this, scene, camera, geometry, material, group );
 
-			if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera );
+			if ( camera.isArrayCamera ) {
 
-			// transparent pass (back-to-front order)
+				var cameras = camera.cameras;
 
-			if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera );
+				for ( var j = 0, jl = cameras.length; j < jl; j ++ ) {
 
-		}
+					var camera2 = cameras[ j ];
+					var bounds = camera2.bounds;
 
-	}
+					var x = bounds.x * _width;
+					var y = bounds.y * _height;
+					var width = bounds.z * _width;
+					var height = bounds.w * _height;
 
-	function renderObjects( renderItems, scene, camera, overrideMaterial ) {
+					_this.setViewport( x, y, width, height );
+					_this.setScissor( x, y, width, height );
+					_this.setScissorTest( true );
 
-		for ( var i = 0, l = renderItems.length; i < l; i ++ ) {
+					renderObject( object, scene, camera2, geometry, material, group );
 
-			var renderItem = renderItems[ i ];
+				}
 
-			var object = renderItem.object;
-			var geometry = renderItem.geometry;
-			var material = overrideMaterial === undefined ? renderItem.material : overrideMaterial;
-			var group = renderItem.group;
+			} else {
 
-			object.onBeforeRender( _this, scene, camera, geometry, material, group );
+				renderObject( object, scene, camera, geometry, material, group );
 
-			renderObject( object, scene, camera, geometry, material, group );
+			}
 
 			object.onAfterRender( _this, scene, camera, geometry, material, group );