Browse Source

WebGLRenderer: Enable stencil with transmission. (#27921)

Michael Herzog 1 year ago
parent
commit
1f7eed808c
2 changed files with 9 additions and 2 deletions
  1. 5 1
      src/renderers/WebGLRenderer.js
  2. 4 1
      src/renderers/webgl/WebGLTextures.js

+ 5 - 1
src/renderers/WebGLRenderer.js

@@ -1407,9 +1407,13 @@ class WebGLRenderer {
 					generateMipmaps: true,
 					generateMipmaps: true,
 					type: ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) ) ? HalfFloatType : UnsignedByteType,
 					type: ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) ) ? HalfFloatType : UnsignedByteType,
 					minFilter: LinearMipmapLinearFilter,
 					minFilter: LinearMipmapLinearFilter,
-					samples: 4
+					samples: 4,
+					stencilBuffer: stencil
 				} );
 				} );
 
 
+				const renderTargetProperties = properties.get( currentRenderState.state.transmissionRenderTarget );
+				renderTargetProperties.__isTransmissionRenderTarget = true;
+
 				// debug
 				// debug
 
 
 				/*
 				/*

+ 4 - 1
src/renderers/webgl/WebGLTextures.js

@@ -1871,7 +1871,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 				if ( ignoreDepthValues === false ) {
 				if ( ignoreDepthValues === false ) {
 
 
 					if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
 					if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
-					if ( renderTarget.stencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;
+
+					// resolving stencil is slow with a D3D backend. disable it for all transmission render targets (see #27799)
+
+					if ( renderTarget.stencilBuffer && renderTargetProperties.__isTransmissionRenderTarget !== true ) mask |= _gl.STENCIL_BUFFER_BIT;
 
 
 				}
 				}