From 76a466d250b065bd818f1397b42ed8decb8a656e Mon Sep 17 00:00:00 2001 From: Olli Etuaho Date: Thu, 30 Jul 2020 16:14:07 +0300 Subject: [PATCH] Fix restoring framebuffer binding after texture swap --- src/renderers/WebGLRenderer.js | 9 ++++----- src/renderers/webgl/WebGLTextures.js | 12 +++++++----- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index aacd9f68770925..65a4631c4ead17 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -128,7 +128,6 @@ function WebGLRenderer( parameters ) { let _currentActiveCubeFace = 0; let _currentActiveMipmapLevel = 0; let _currentRenderTarget = null; - let _currentFramebuffer = null; let _currentMaterialId = - 1; let _currentCamera = null; @@ -1833,10 +1832,10 @@ function WebGLRenderer( parameters ) { } - if ( _currentFramebuffer !== framebuffer ) { + if ( textures.currentFramebuffer !== framebuffer ) { _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); - _currentFramebuffer = framebuffer; + textures.currentFramebuffer = framebuffer; } @@ -1874,7 +1873,7 @@ function WebGLRenderer( parameters ) { let restore = false; - if ( framebuffer !== _currentFramebuffer ) { + if ( framebuffer !== textures.currentFramebuffer ) { _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); @@ -1924,7 +1923,7 @@ function WebGLRenderer( parameters ) { if ( restore ) { - _gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer ); + _gl.bindFramebuffer( _gl.FRAMEBUFFER, textures.currentFramebuffer ); } diff --git a/src/renderers/webgl/WebGLTextures.js b/src/renderers/webgl/WebGLTextures.js index 0df72e8d3b54ba..28e6f9ede46f4e 100644 --- a/src/renderers/webgl/WebGLTextures.js +++ b/src/renderers/webgl/WebGLTextures.js @@ -259,13 +259,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, } - _gl.bindFramebuffer( _gl.FRAMEBUFFER, null ); + _gl.bindFramebuffer( _gl.FRAMEBUFFER, this.currentFramebuffer ); } else { _gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer ); _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, textureProperties.__webglTexture, 0 ); - _gl.bindFramebuffer( _gl.FRAMEBUFFER, null ); + _gl.bindFramebuffer( _gl.FRAMEBUFFER, this.currentFramebuffer ); } @@ -879,7 +879,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null ); _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); _gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 ); - _gl.bindFramebuffer( _gl.FRAMEBUFFER, null ); + _gl.bindFramebuffer( _gl.FRAMEBUFFER, this.currentFramebuffer ); } @@ -1045,7 +1045,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, } - _gl.bindFramebuffer( _gl.FRAMEBUFFER, null ); + _gl.bindFramebuffer( _gl.FRAMEBUFFER, this.currentFramebuffer ); } @@ -1113,7 +1113,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, } - _gl.bindFramebuffer( _gl.FRAMEBUFFER, null ); + _gl.bindFramebuffer( _gl.FRAMEBUFFER, this.currentFramebuffer ); } else { @@ -1334,6 +1334,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, this.safeSetTexture2D = safeSetTexture2D; this.safeSetTextureCube = safeSetTextureCube; + this.currentFramebuffer = null; + } export { WebGLTextures };