|
|
@@ -52950,7 +52950,7 @@ class WebGLRenderer {
|
|
|
|
|
|
//
|
|
|
|
|
|
- if ( _currentRenderTarget !== null ) {
|
|
|
+ if ( _currentRenderTarget !== null && _currentActiveMipmapLevel === 0 ) {
|
|
|
|
|
|
// resolve multisample renderbuffers to a single-sample texture if necessary
|
|
|
|
|
|
@@ -53945,6 +53945,7 @@ class WebGLRenderer {
|
|
|
|
|
|
};
|
|
|
|
|
|
+ const _scratchFrameBuffer = _gl.createFramebuffer();
|
|
|
this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {
|
|
|
|
|
|
_currentRenderTarget = renderTarget;
|
|
|
@@ -54053,6 +54054,14 @@ class WebGLRenderer {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ // Use a scratch frame buffer if rendering to a mip level to avoid depth buffers
|
|
|
+ // being bound that are different sizes.
|
|
|
+ if ( activeMipmapLevel !== 0 ) {
|
|
|
+
|
|
|
+ framebuffer = _scratchFrameBuffer;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
const framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
|
|
|
|
if ( framebufferBound && useDefaultFramebuffer ) {
|
|
|
@@ -54073,8 +54082,15 @@ class WebGLRenderer {
|
|
|
} else if ( isRenderTarget3D ) {
|
|
|
|
|
|
const textureProperties = properties.get( renderTarget.texture );
|
|
|
- const layer = activeCubeFace || 0;
|
|
|
- _gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );
|
|
|
+ const layer = activeCubeFace;
|
|
|
+ _gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel, layer );
|
|
|
+
|
|
|
+ } else if ( renderTarget !== null && activeMipmapLevel !== 0 ) {
|
|
|
+
|
|
|
+ // Only bind the frame buffer if we are using a scratch frame buffer to render to a mipmap.
|
|
|
+ // If we rebind the texture when using a multi sample buffer then an error about inconsistent samples will be thrown.
|
|
|
+ const textureProperties = properties.get( renderTarget.texture );
|
|
|
+ _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, textureProperties.__webglTexture, activeMipmapLevel );
|
|
|
|
|
|
}
|
|
|
|