diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 60da6d87750ee5f172c9c0d7cee57e7e060920cb..48d7c631babb5d344ed171369aec88ab12b578da 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -1255,27 +1255,33 @@ function WebGLRenderer( parameters ) { } - // + // render scene - var opaqueObjects = currentRenderList.opaque; - var transparentObjects = currentRenderList.transparent; + if ( camera.isArrayCamera ) { - if ( scene.overrideMaterial ) { + var cameras = camera.cameras; - var overrideMaterial = scene.overrideMaterial; + for ( var j = 0, jl = cameras.length; j < jl; j ++ ) { - if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial ); - if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial ); + var camera2 = cameras[ j ]; + var bounds = camera2.bounds; - } else { + var x = bounds.x * _width; + var y = bounds.y * _height; + var width = bounds.z * _width; + var height = bounds.w * _height; - // opaque pass (front-to-back order) + _this.setViewport( x, y, width, height ); + _this.setScissor( x, y, width, height ); + _this.setScissorTest( true ); - if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera ); + renderScene( currentRenderList, scene, camera ); - // transparent pass (back-to-front order) + } - if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera ); + } else { + + renderScene( currentRenderList, scene, camera ); } @@ -1463,46 +1469,46 @@ function WebGLRenderer( parameters ) { } - function renderObjects( renderList, scene, camera, overrideMaterial ) { + function renderScene( renderList, scene, camera ) { - for ( var i = 0, l = renderList.length; i < l; i ++ ) { + var opaqueObjects = renderList.opaque; + var transparentObjects = renderList.transparent; - var renderItem = renderList[ i ]; + if ( scene.overrideMaterial ) { - var object = renderItem.object; - var geometry = renderItem.geometry; - var material = overrideMaterial === undefined ? renderItem.material : overrideMaterial; - var group = renderItem.group; + var overrideMaterial = scene.overrideMaterial; - object.onBeforeRender( _this, scene, camera, geometry, material, group ); + if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial ); + if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial ); + + } else { - if ( camera.isArrayCamera ) { + // opaque pass (front-to-back order) - var cameras = camera.cameras; + if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera ); - for ( var j = 0, jl = cameras.length; j < jl; j ++ ) { + // transparent pass (back-to-front order) + + if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera ); - 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; + } - _this.setViewport( x, y, width, height ); - _this.setScissor( x, y, width, height ); - _this.setScissorTest( true ); + function renderObjects( renderItems, scene, camera, overrideMaterial ) { - renderObject( object, scene, camera2, geometry, material, group ); + for ( var i = 0, l = renderItems.length; i < l; i ++ ) { - } + var renderItem = renderItems[ i ]; - } else { + var object = renderItem.object; + var geometry = renderItem.geometry; + var material = overrideMaterial === undefined ? renderItem.material : overrideMaterial; + var group = renderItem.group; - renderObject( object, scene, camera, geometry, material, group ); + object.onBeforeRender( _this, scene, camera, geometry, material, group ); - } + renderObject( object, scene, camera, geometry, material, group ); object.onAfterRender( _this, scene, camera, geometry, material, group );