提交 a3681944 编写于 作者: M Mr.doob

WebGLMultiview: Brought back removed non-ArrayCamera code path and use in VR.

上级 d6f1f896
......@@ -1197,7 +1197,7 @@ function WebGLRenderer( parameters ) {
}
if ( camera.isArrayCamera && multiview.isAvailable() ) {
if ( vr.enabled && multiview.isAvailable() ) {
multiview.attachCamera( camera );
......@@ -1257,13 +1257,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();
......@@ -1416,7 +1416,7 @@ function WebGLRenderer( parameters ) {
_currentArrayCamera = camera;
if ( multiview.isAvailable() ) {
if ( vr.enabled && multiview.isAvailable() ) {
renderObject( object, scene, camera, geometry, material, group );
......
......@@ -16,7 +16,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;
......@@ -39,6 +39,7 @@ function WebGLMultiview( renderer, gl ) {
renderSize = new Vector2();
mat4 = [];
mat3 = [];
cameraArray = [];
for ( var i = 0; i < maxNumViews; i ++ ) {
......@@ -55,9 +56,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 ++ ) {
......@@ -71,7 +82,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 ++ ) {
......@@ -85,7 +96,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 ++ ) {
......@@ -101,6 +112,8 @@ function WebGLMultiview( renderer, gl ) {
function isMultiviewCompatible( camera ) {
if ( camera.isArrayCamera === undefined ) return true;
var cameras = camera.cameras;
if ( cameras.length > maxNumViews ) return false;
......@@ -128,16 +141,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 );
renderTarget.setSize( viewport.z, viewport.w );
renderTarget.setNumViews( camera.cameras.length );
} else {
renderTarget.setSize( renderSize.x, renderSize.y );
renderTarget.setNumViews( DEFAULT_NUMVIEWS );
}
}
function attachCamera( camera ) {
if ( ! isMultiviewCompatible( camera ) ) return;
if ( isMultiviewCompatible( camera ) === false ) return;
currentRenderTarget = renderer.getRenderTarget();
resizeRenderTarget( camera );
......@@ -165,17 +187,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( gl.READ_FRAMEBUFFER, srcFramebuffers[ i ] );
gl.blitFramebuffer( 0, 0, viewWidth, viewHeight, x1, y1, x2, y2, gl.COLOR_BUFFER_BIT, gl.NEAREST );
}
} else {
gl.bindFramebuffer( gl.READ_FRAMEBUFFER, srcFramebuffers[ i ] );
gl.blitFramebuffer( 0, 0, viewWidth, viewHeight, x1, y1, x2, y2, gl.COLOR_BUFFER_BIT, gl.NEAREST );
gl.bindFramebuffer( gl.READ_FRAMEBUFFER, srcFramebuffers[ 0 ] );
gl.blitFramebuffer( 0, 0, viewWidth, viewHeight, 0, 0, renderSize.x, renderSize.y, gl.COLOR_BUFFER_BIT, gl.NEAREST );
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册