2
0
Эх сурвалжийг харах

Refactor renderObjects, fix Multiview.getNumViews() and capabilities.maxNumMultiviewsViews

Fernando Serrano 6 жил өмнө
parent
commit
ce60052f1c

+ 31 - 44
src/renderers/WebGLRenderer.js

@@ -1381,76 +1381,63 @@ function WebGLRenderer( parameters ) {
 
 	function renderObjects( renderList, scene, camera, overrideMaterial ) {
 
-		if ( multiview.isEnabled() ) {
-
-			for ( var i = 0, l = renderList.length; i < l; i ++ ) {
-
-				var renderItem = renderList[ i ];
+		for ( var i = 0, l = renderList.length; i < l; i ++ ) {
 
-				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 );
-
-			}
-
-		} else {
+			var renderItem = renderList[ i ];
 
-			for ( var i = 0, l = renderList.length; i < l; i ++ ) {
+			var object = renderItem.object;
+			var geometry = renderItem.geometry;
+			var material = overrideMaterial === undefined ? renderItem.material : overrideMaterial;
+			var group = renderItem.group;
 
-				var renderItem = renderList[ i ];
+			if ( multiview.isEnabled() ) {
 
-				var object = renderItem.object;
-				var geometry = renderItem.geometry;
-				var material = overrideMaterial === undefined ? renderItem.material : overrideMaterial;
-				var group = renderItem.group;
+				_currentArrayCamera = camera;
 
-				if ( camera.isArrayCamera ) {
+				renderObject(	object, scene, camera, geometry, material, group );
 
-					_currentArrayCamera = camera;
+			} else if ( camera.isArrayCamera ) {
 
-					var cameras = camera.cameras;
+				_currentArrayCamera = camera;
 
-					for ( var j = 0, jl = cameras.length; j < jl; j ++ ) {
+				var cameras = camera.cameras;
 
-						var camera2 = cameras[ j ];
+				for ( var j = 0, jl = cameras.length; j < jl; j ++ ) {
 
-						if ( object.layers.test( camera2.layers ) ) {
+					var camera2 = cameras[ j ];
 
-							if ( 'viewport' in camera2 ) { // XR
+					if ( object.layers.test( camera2.layers ) ) {
 
-								state.viewport( _currentViewport.copy( camera2.viewport ) );
+						if ( 'viewport' in camera2 ) { // XR
 
-							} else {
+							state.viewport( _currentViewport.copy( camera2.viewport ) );
 
-								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;
+							var bounds = camera2.bounds;
 
-								state.viewport( _currentViewport.set( x, y, width, height ).multiplyScalar( _pixelRatio ) );
+							var x = bounds.x * _width;
+							var y = bounds.y * _height;
+							var width = bounds.z * _width;
+							var height = bounds.w * _height;
 
-							}
+							state.viewport( _currentViewport.set( x, y, width, height ).multiplyScalar( _pixelRatio ) );
 
-							currentRenderState.setupLights( camera2 );
+						}
 
-							renderObject( object, scene, camera2, geometry, material, group );
+						currentRenderState.setupLights( camera2 );
 
-						}
+						renderObject( object, scene, camera2, geometry, material, group );
 
 					}
 
-				} else {
+				}
 
-					_currentArrayCamera = null;
+			} else {
 
-					renderObject( object, scene, camera, geometry, material, group );
+				_currentArrayCamera = null;
 
-				}
+				renderObject( object, scene, camera, geometry, material, group );
 
 			}
 

+ 1 - 1
src/renderers/webgl/WebGLCapabilities.js

@@ -88,7 +88,7 @@ function WebGLCapabilities( gl, extensions, parameters ) {
 
 	var multiviewExt = extensions.get( 'OVR_multiview2' );
 	var multiview = isWebGL2 && ( !! multiviewExt );
-	var maxMultiviewViews = multiview ? gl.getParameter( multiviewExt.MAX_VIEWS_OVR ) : 1;
+	var maxMultiviewViews = multiview ? gl.getParameter( multiviewExt.MAX_VIEWS_OVR ) : 0;
 
 	return {
 

+ 7 - 1
src/renderers/webgl/WebGLMultiview.js

@@ -28,7 +28,13 @@ function WebGLMultiview( renderer, requested, options ) {
 
 	this.getNumViews = function () {
 
-		return renderTarget ? renderTarget.numViews : 0;
+		if ( renderTarget && renderer.getRenderTarget() === renderTarget ) {
+
+			return renderTarget.numViews;
+
+		}
+
+		return 0;
 
 	};