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

Clean up multiview render path, create rendertarget

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