Преглед изворни кода

Check if camera is compatible with multiview

Fernando Serrano пре 6 година
родитељ
комит
f076edccd3
1 измењених фајлова са 25 додато и 1 уклоњено
  1. 25 1
      src/renderers/webgl/WebGLMultiview.js

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

@@ -14,6 +14,9 @@ function WebGLMultiview( renderer, requested, options ) {
 
 	var DEFAULT_NUMVIEWS = 2;
 	var gl = renderer.context;
+
+	var maxNumViews = capabilities.maxMultiviewViews;
+
 	var capabilities = renderer.capabilities;
 	var properties = renderer.properties;
 
@@ -76,7 +79,6 @@ function WebGLMultiview( renderer, requested, options ) {
 
 	}
 
-
 	function updateCameraProjectionMatricesUniform( camera, uniforms ) {
 
 		var cameras = getCameraArray( camera );
@@ -121,6 +123,24 @@ function WebGLMultiview( renderer, requested, options ) {
 
 	}
 
+	function isMultiviewCompatible( camera ) {
+
+		if ( ! camera.isArrayCamera ) return true;
+
+		var cameras = camera.cameras;
+
+		if ( cameras.length > maxNumViews ) return false;
+
+		for ( var i = 1, il = cameras.length; i < il; i ++ ) {
+
+			if ( cameras[ 0 ].bounds.z !== cameras[ i ].bounds.z ||
+				cameras[ 0 ].bounds.w !== cameras[ i ].bounds.w ) return false;
+
+		}
+
+		return true;
+
+	}
 
 	function resizeRenderTarget( camera ) {
 
@@ -152,6 +172,8 @@ function WebGLMultiview( renderer, requested, options ) {
 
 	function attachRenderTarget( camera ) {
 
+		if ( ! isMultiviewCompatible( camera ) ) return;
+
 		currentRenderTarget = renderer.getRenderTarget();
 		resizeRenderTarget( camera );
 		renderer.setRenderTarget( renderTarget );
@@ -160,6 +182,8 @@ function WebGLMultiview( renderer, requested, options ) {
 
 	function detachRenderTarget( camera ) {
 
+		if ( renderTarget !== renderer.getRenderTarget() ) return false;
+
 		renderer.setRenderTarget( currentRenderTarget );
 		flush( camera );