|
@@ -14,6 +14,9 @@ function WebGLMultiview( renderer, requested, options ) {
|
|
|
|
|
|
var DEFAULT_NUMVIEWS = 2;
|
|
var DEFAULT_NUMVIEWS = 2;
|
|
var gl = renderer.context;
|
|
var gl = renderer.context;
|
|
|
|
+
|
|
|
|
+ var maxNumViews = capabilities.maxMultiviewViews;
|
|
|
|
+
|
|
var capabilities = renderer.capabilities;
|
|
var capabilities = renderer.capabilities;
|
|
var properties = renderer.properties;
|
|
var properties = renderer.properties;
|
|
|
|
|
|
@@ -76,7 +79,6 @@ function WebGLMultiview( renderer, requested, options ) {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
function updateCameraProjectionMatricesUniform( camera, uniforms ) {
|
|
function updateCameraProjectionMatricesUniform( camera, uniforms ) {
|
|
|
|
|
|
var cameras = getCameraArray( camera );
|
|
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 ) {
|
|
function resizeRenderTarget( camera ) {
|
|
|
|
|
|
@@ -152,6 +172,8 @@ function WebGLMultiview( renderer, requested, options ) {
|
|
|
|
|
|
function attachRenderTarget( camera ) {
|
|
function attachRenderTarget( camera ) {
|
|
|
|
|
|
|
|
+ if ( ! isMultiviewCompatible( camera ) ) return;
|
|
|
|
+
|
|
currentRenderTarget = renderer.getRenderTarget();
|
|
currentRenderTarget = renderer.getRenderTarget();
|
|
resizeRenderTarget( camera );
|
|
resizeRenderTarget( camera );
|
|
renderer.setRenderTarget( renderTarget );
|
|
renderer.setRenderTarget( renderTarget );
|
|
@@ -160,6 +182,8 @@ function WebGLMultiview( renderer, requested, options ) {
|
|
|
|
|
|
function detachRenderTarget( camera ) {
|
|
function detachRenderTarget( camera ) {
|
|
|
|
|
|
|
|
+ if ( renderTarget !== renderer.getRenderTarget() ) return false;
|
|
|
|
+
|
|
renderer.setRenderTarget( currentRenderTarget );
|
|
renderer.setRenderTarget( currentRenderTarget );
|
|
flush( camera );
|
|
flush( camera );
|
|
|
|
|