提交 5c1e9abd 编写于 作者: F Fernando Serrano

Clean up multiview render path, create rendertarget

上级 03b1efa8
......@@ -315,7 +315,7 @@ function WebGLRenderer( parameters ) {
this.vr = vr;
var multiview = this.multiview = new WebGLMultiview( _multiviewRequested, _gl, _canvas, extensions, capabilities );
var multiview = this.multiview = new WebGLMultiview( _multiviewRequested, _gl, _canvas, extensions, capabilities, properties );
// shadow map
......@@ -1178,8 +1178,14 @@ function WebGLRenderer( parameters ) {
this.setRenderTarget( renderTarget );
} else if ( this.multiview.isEnabled() ) {
this.setRenderTarget( this.multiview.renderTarget );
this.multiview.bindFramebuffer( camera );
}
//
background.render( currentRenderList, scene, camera, forceClear );
......@@ -1224,6 +1230,12 @@ function WebGLRenderer( parameters ) {
textures.updateMultisampleRenderTarget( _currentRenderTarget );
if ( this.multiview.isEnabled() ) {
this.multiview.unbindFramebuffer( camera );
}
}
// Ensure depth buffer writing is enabled so it can be cleared on next render
......@@ -1369,25 +1381,6 @@ function WebGLRenderer( parameters ) {
if ( multiview.isEnabled() ) {
multiview.bindMultiviewFrameBuffer( camera );
_gl.disable( _gl.SCISSOR_TEST );
if ( camera.isArrayCamera ) {
var height = _canvas.height;
var width = Math.floor( _canvas.width * 0.5 );
} else {
var width = _canvas.width;
var height = _canvas.height;
}
_gl.viewport( 0, 0, width, height );
_gl.clear( _gl.COLOR_BUFFER_BIT | _gl.DEPTH_BUFFER_BIT | _gl.STENCIL_BUFFER_BIT );
for ( var i = 0, l = renderList.length; i < l; i ++ ) {
var renderItem = renderList[ i ];
......@@ -1401,8 +1394,6 @@ function WebGLRenderer( parameters ) {
}
multiview.unbindMultiviewFrameBuffer( camera );
} else {
for ( var i = 0, l = renderList.length; i < l; i ++ ) {
......
......@@ -2,7 +2,9 @@
* @author fernandojsg / http://fernandojsg.com
*/
function WebGLMultiview( requested, gl, canvas, extensions, capabilities ) {
import { WebGLRenderTarget } from '../WebGLRenderTarget.js';
function WebGLMultiview( requested, gl, canvas, extensions, capabilities, properties ) {
this.isAvailable = function () {
......@@ -81,9 +83,14 @@ function WebGLMultiview( requested, gl, canvas, extensions, capabilities ) {
framebufferWidth = halfWidth;
framebufferHeight = canvas.height;
this.renderTarget = new WebGLRenderTarget( framebufferWidth, framebufferHeight );
// @hack This should be done in WebGLTextures?
properties.get( this.renderTarget ).__webglFramebuffer = framebuffer;
};
this.bindMultiviewFrameBuffer = function ( camera ) {
this.bindFramebuffer = function ( camera ) {
var width = canvas.width;
var height = canvas.height;
......@@ -108,13 +115,15 @@ function WebGLMultiview( requested, gl, canvas, extensions, capabilities ) {
framebufferWidth = width;
framebufferHeight = height;
this.renderTarget.setSize( width, height );
}
gl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, framebuffer );
};
this.unbindMultiviewFrameBuffer = function ( camera ) {
this.unbindFramebuffer = function ( camera ) {
gl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册