|
@@ -22296,7 +22296,7 @@ function WebGLMultiview( renderer, gl ) {
|
|
|
var properties = renderer.properties;
|
|
|
|
|
|
var renderTarget, currentRenderTarget;
|
|
|
- var mat3, mat4, renderSize;
|
|
|
+ var mat3, mat4, cameraArray, renderSize;
|
|
|
|
|
|
var available;
|
|
|
var maxNumViews = 0;
|
|
@@ -22319,6 +22319,7 @@ function WebGLMultiview( renderer, gl ) {
|
|
|
renderSize = new Vector2();
|
|
|
mat4 = [];
|
|
|
mat3 = [];
|
|
|
+ cameraArray = [];
|
|
|
|
|
|
for ( var i = 0; i < maxNumViews; i ++ ) {
|
|
|
|
|
@@ -22335,9 +22336,19 @@ function WebGLMultiview( renderer, gl ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ function getCameraArray( camera ) {
|
|
|
+
|
|
|
+ if ( camera.isArrayCamera ) return camera.cameras;
|
|
|
+
|
|
|
+ cameraArray[ 0 ] = camera;
|
|
|
+
|
|
|
+ return cameraArray;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
function updateCameraProjectionMatricesUniform( camera, uniforms ) {
|
|
|
|
|
|
- var cameras = camera.cameras;
|
|
|
+ var cameras = getCameraArray( camera );
|
|
|
|
|
|
for ( var i = 0; i < cameras.length; i ++ ) {
|
|
|
|
|
@@ -22351,7 +22362,7 @@ function WebGLMultiview( renderer, gl ) {
|
|
|
|
|
|
function updateCameraViewMatricesUniform( camera, uniforms ) {
|
|
|
|
|
|
- var cameras = camera.cameras;
|
|
|
+ var cameras = getCameraArray( camera );
|
|
|
|
|
|
for ( var i = 0; i < cameras.length; i ++ ) {
|
|
|
|
|
@@ -22365,7 +22376,7 @@ function WebGLMultiview( renderer, gl ) {
|
|
|
|
|
|
function updateObjectMatricesUniforms( object, camera, uniforms ) {
|
|
|
|
|
|
- var cameras = camera.cameras;
|
|
|
+ var cameras = getCameraArray( camera );
|
|
|
|
|
|
for ( var i = 0; i < cameras.length; i ++ ) {
|
|
|
|
|
@@ -22381,6 +22392,8 @@ function WebGLMultiview( renderer, gl ) {
|
|
|
|
|
|
function isMultiviewCompatible( camera ) {
|
|
|
|
|
|
+ if ( camera.isArrayCamera === undefined ) return true;
|
|
|
+
|
|
|
var cameras = camera.cameras;
|
|
|
|
|
|
if ( cameras.length > maxNumViews ) return false;
|
|
@@ -22408,16 +22421,25 @@ function WebGLMultiview( renderer, gl ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- var viewport = camera.cameras[ 0 ].viewport;
|
|
|
+ if ( camera.isArrayCamera ) {
|
|
|
+
|
|
|
+ var viewport = camera.cameras[ 0 ].viewport;
|
|
|
+
|
|
|
+ renderTarget.setSize( viewport.z, viewport.w );
|
|
|
+ renderTarget.setNumViews( camera.cameras.length );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ renderTarget.setSize( renderSize.x, renderSize.y );
|
|
|
+ renderTarget.setNumViews( DEFAULT_NUMVIEWS );
|
|
|
|
|
|
- renderTarget.setSize( viewport.z, viewport.w );
|
|
|
- renderTarget.setNumViews( camera.cameras.length );
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
function attachCamera( camera ) {
|
|
|
|
|
|
- if ( ! isMultiviewCompatible( camera ) ) return;
|
|
|
+ if ( isMultiviewCompatible( camera ) === false ) return;
|
|
|
|
|
|
currentRenderTarget = renderer.getRenderTarget();
|
|
|
resizeRenderTarget( camera );
|
|
@@ -22445,17 +22467,26 @@ function WebGLMultiview( renderer, gl ) {
|
|
|
var viewWidth = srcRenderTarget.width;
|
|
|
var viewHeight = srcRenderTarget.height;
|
|
|
|
|
|
- for ( var i = 0; i < numViews; i ++ ) {
|
|
|
+ if ( camera.isArrayCamera ) {
|
|
|
+
|
|
|
+ for ( var i = 0; i < numViews; i ++ ) {
|
|
|
|
|
|
- var viewport = camera.cameras[ i ].viewport;
|
|
|
+ var viewport = camera.cameras[ i ].viewport;
|
|
|
|
|
|
- var x1 = viewport.x;
|
|
|
- var y1 = viewport.y;
|
|
|
- var x2 = x1 + viewport.z;
|
|
|
- var y2 = y1 + viewport.w;
|
|
|
+ var x1 = viewport.x;
|
|
|
+ var y1 = viewport.y;
|
|
|
+ var x2 = x1 + viewport.z;
|
|
|
+ var y2 = y1 + viewport.w;
|
|
|
|
|
|
- gl.bindFramebuffer( 36008, srcFramebuffers[ i ] );
|
|
|
- gl.blitFramebuffer( 0, 0, viewWidth, viewHeight, x1, y1, x2, y2, 16384, 9728 );
|
|
|
+ gl.bindFramebuffer( 36008, srcFramebuffers[ i ] );
|
|
|
+ gl.blitFramebuffer( 0, 0, viewWidth, viewHeight, x1, y1, x2, y2, 16384, 9728 );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ gl.bindFramebuffer( 36008, srcFramebuffers[ 0 ] );
|
|
|
+ gl.blitFramebuffer( 0, 0, viewWidth, viewHeight, 0, 0, renderSize.x, renderSize.y, 16384, 9728 );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -24457,7 +24488,7 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( camera.isArrayCamera && multiview.isAvailable() ) {
|
|
|
+ if ( vr.enabled && multiview.isAvailable() ) {
|
|
|
|
|
|
multiview.attachCamera( camera );
|
|
|
|
|
@@ -24517,13 +24548,13 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
state.setPolygonOffset( false );
|
|
|
|
|
|
- if ( camera.isArrayCamera && multiview.isAvailable() ) {
|
|
|
+ if ( vr.enabled ) {
|
|
|
|
|
|
- multiview.detachCamera( camera );
|
|
|
+ if ( multiview.isAvailable() ) {
|
|
|
|
|
|
- }
|
|
|
+ multiview.detachCamera( camera );
|
|
|
|
|
|
- if ( vr.enabled ) {
|
|
|
+ }
|
|
|
|
|
|
vr.submitFrame();
|
|
|
|
|
@@ -24676,7 +24707,7 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
_currentArrayCamera = camera;
|
|
|
|
|
|
- if ( multiview.isAvailable() ) {
|
|
|
+ if ( vr.enabled && multiview.isAvailable() ) {
|
|
|
|
|
|
renderObject( object, scene, camera, geometry, material, group );
|
|
|
|