Browse Source

Merge pull request #18904 from Mugen87/dev46

WebGLTextures: Fix DepthTexture with WebGLMultisampleRenderTarget.
Mr.doob 5 years ago
parent
commit
2ac7643940
2 changed files with 44 additions and 11 deletions
  1. 42 10
      src/renderers/webgl/WebGLTextures.js
  2. 2 1
      utils/build/rollup.config.js

+ 42 - 10
src/renderers/webgl/WebGLTextures.js

@@ -650,15 +650,29 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			glInternalFormat = _gl.DEPTH_COMPONENT;
 			glInternalFormat = _gl.DEPTH_COMPONENT;
 
 
-			if ( texture.type === FloatType ) {
+			if ( isWebGL2 ) {
+
+				if ( texture.type === FloatType ) {
 
 
-				if ( isWebGL2 === false ) throw new Error( 'Float Depth Texture only supported in WebGL2.0' );
-				glInternalFormat = _gl.DEPTH_COMPONENT32F;
+					glInternalFormat = _gl.DEPTH_COMPONENT32F;
 
 
-			} else if ( isWebGL2 ) {
+				} else if ( texture.type === UnsignedIntType ) {
 
 
-				// WebGL 2.0 requires signed internalformat for glTexImage2D
-				glInternalFormat = _gl.DEPTH_COMPONENT16;
+					glInternalFormat = _gl.DEPTH_COMPONENT24;
+
+				} else {
+
+					glInternalFormat = _gl.DEPTH_COMPONENT16; // WebGL2 requires sized internalformat for glTexImage2D
+
+				}
+
+			} else {
+
+				if ( texture.type === FloatType ) {
+
+					console.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );
+
+				}
 
 
 			}
 			}
 
 
@@ -826,15 +840,33 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {
 		if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {
 
 
+			var glInternalFormat = _gl.DEPTH_COMPONENT16;
+
 			if ( isMultisample ) {
 			if ( isMultisample ) {
 
 
+				var depthTexture = renderTarget.depthTexture;
+
+				if ( depthTexture && depthTexture.isDepthTexture ) {
+
+					if ( depthTexture.type === FloatType ) {
+
+						glInternalFormat = _gl.DEPTH_COMPONENT32F;
+
+					} else if ( depthTexture.type === UnsignedIntType ) {
+
+						glInternalFormat = _gl.DEPTH_COMPONENT24;
+
+					}
+
+				}
+
 				var samples = getRenderTargetSamples( renderTarget );
 				var samples = getRenderTargetSamples( renderTarget );
 
 
-				_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height );
+				_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
 
 
 			} else {
 			} else {
 
 
-				_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height );
+				_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );
 
 
 			}
 			}
 
 
@@ -949,7 +981,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 					_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );
 					_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );
 					renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();
 					renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();
-					setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget );
+					setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );
 
 
 				}
 				}
 
 
@@ -957,7 +989,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 				_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
 				_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
 				renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();
 				renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();
-				setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget );
+				setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );
 
 
 			}
 			}
 
 

+ 2 - 1
utils/build/rollup.config.js

@@ -91,6 +91,8 @@ function glconstants() {
 		TEXTURE_3D: 32879,
 		TEXTURE_3D: 32879,
 		CLAMP_TO_EDGE: 33071,
 		CLAMP_TO_EDGE: 33071,
 		DEPTH_COMPONENT16: 33189,
 		DEPTH_COMPONENT16: 33189,
+		DEPTH_COMPONENT24: 33190,
+		DEPTH_COMPONENT32F: 36012,
 		DEPTH_STENCIL_ATTACHMENT: 33306,
 		DEPTH_STENCIL_ATTACHMENT: 33306,
 		R8: 33321,
 		R8: 33321,
 		R16F: 33325,
 		R16F: 33325,
@@ -126,7 +128,6 @@ function glconstants() {
 		IMPLEMENTATION_COLOR_READ_TYPE: 35738,
 		IMPLEMENTATION_COLOR_READ_TYPE: 35738,
 		IMPLEMENTATION_COLOR_READ_FORMAT: 35739,
 		IMPLEMENTATION_COLOR_READ_FORMAT: 35739,
 		TEXTURE_2D_ARRAY: 35866,
 		TEXTURE_2D_ARRAY: 35866,
-		DEPTH_COMPONENT32F: 36012,
 		COLOR_ATTACHMENT0: 36064,
 		COLOR_ATTACHMENT0: 36064,
 		FRAMEBUFFER_COMPLETE: 36053,
 		FRAMEBUFFER_COMPLETE: 36053,
 		DEPTH_ATTACHMENT: 36096,
 		DEPTH_ATTACHMENT: 36096,