Skip to content

Commit 349c487

Browse files
authored
RenderTarget: Add resolveDepthBuffer. (#28170)
* RenderTarget: Add `ignoreDepthValues`. * RenderTarget: Rename `ignoreDepthValues` to `resolveDepthBuffer`. * Docs: Update `WebGLRenderTarget` page. * Docs: Update translated pages.
1 parent c5dcab6 commit 349c487

File tree

8 files changed

+41
-15
lines changed

8 files changed

+41
-15
lines changed

docs/api/ar/renderers/WebGLRenderTarget.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ <h3>
4949
[page:String internalFormat] - الافتراضي هو `null`.<br />
5050
[page:Boolean depthBuffer] - الافتراضي هو `true`. <br />
5151
[page:Boolean stencilBuffer] - الافتراضي هو `false`. <br />
52+
[page:Boolean resolveDepthBuffer] - الافتراضي هو `true`. <br />
5253
[page:Boolean resolveStencilBuffer] - الافتراضي هو `true`. <br />
5354
[page:Number samples] - الافتراضي هو 0. <br /><br />
5455

@@ -89,9 +90,16 @@ <h3>[property:Boolean depthBuffer]</h3>
8990
<h3>[property:Boolean stencilBuffer]</h3>
9091
<p>يعرض على مخزن القالب. الافتراضي هو false.</p>
9192

93+
<h3>[property:Boolean resolveDepthBuffer]</h3>
94+
<p>
95+
Defines whether the depth buffer should be resolved when rendering into a multisampled render target.
96+
Default is `true`.
97+
</p>
98+
9299
<h3>[property:Boolean resolveStencilBuffer]</h3>
93100
<p>
94101
Defines whether the stencil buffer should be resolved when rendering into a multisampled render target.
102+
This property has no effect when [page:.resolveDepthBuffer] is set to `false`.
95103
Default is `true`.
96104
</p>
97105

docs/api/en/renderers/WebGLRenderTarget.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ <h3>
5050
[page:String internalFormat] - default is `null`.<br />
5151
[page:Boolean depthBuffer] - default is `true`. <br />
5252
[page:Boolean stencilBuffer] - default is `false`.<br />
53+
[page:Boolean resolveDepthBuffer] - default is `true`.<br />
5354
[page:Boolean resolveStencilBuffer] - default is `true`.<br />
5455
[page:Number samples] - default is `0`.<br />
5556
[page:Number count] - default is `1`.<br /><br />
@@ -98,9 +99,16 @@ <h3>[property:Boolean depthBuffer]</h3>
9899
<h3>[property:Boolean stencilBuffer]</h3>
99100
<p>Renders to the stencil buffer. Default is false.</p>
100101

102+
<h3>[property:Boolean resolveDepthBuffer]</h3>
103+
<p>
104+
Defines whether the depth buffer should be resolved when rendering into a multisampled render target.
105+
Default is `true`.
106+
</p>
107+
101108
<h3>[property:Boolean resolveStencilBuffer]</h3>
102109
<p>
103110
Defines whether the stencil buffer should be resolved when rendering into a multisampled render target.
111+
This property has no effect when [page:.resolveDepthBuffer] is set to `false`.
104112
Default is `true`.
105113
</p>
106114

docs/api/it/renderers/WebGLRenderTarget.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ <h3>[name]([param:Number width], [param:Number height], [param:Object options])<
4343
[page:String internalFormat] - il valore predefinito è `null`.<br />
4444
[page:Boolean depthBuffer] - il valore predefinito è `true`. <br />
4545
[page:Boolean stencilBuffer] - il valore predefinito è `false`.<br />
46+
[page:Boolean resolveDepthBuffer] - il valore predefinito è `true`.<br />
4647
[page:Boolean resolveStencilBuffer] - il valore predefinito è `true`.<br />
4748
[page:Number samples] - il valore predefinito è 0.<br />
4849
[page:Number count] - default is `1`.<br /><br />
@@ -103,9 +104,16 @@ <h3>[property:Boolean stencilBuffer]</h3>
103104
Effettua il rendering al buffer stencil. Il valore predefinito è `false`.
104105
</p>
105106

107+
<h3>[property:Boolean resolveDepthBuffer]</h3>
108+
<p>
109+
Defines whether the depth buffer should be resolved when rendering into a multisampled render target.
110+
Il valore predefinito è `true`.
111+
</p>
112+
106113
<h3>[property:Boolean resolveStencilBuffer]</h3>
107114
<p>
108115
Defines whether the stencil buffer should be resolved when rendering into a multisampled render target.
116+
This property has no effect when [page:.resolveDepthBuffer] is set to `false`.
109117
Il valore predefinito è `true`.
110118
</p>
111119

docs/api/zh/renderers/WebGLRenderTarget.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ <h3>[name]([param:Number width], [param:Number height], [param:Object options])<
3939
[page:String internalFormat] - 默认是 `null`.<br />
4040
[page:Boolean depthBuffer] - 默认是`true`.<br />
4141
[page:Boolean stencilBuffer] - 默认是`false`.<br />
42+
[page:Boolean resolveDepthBuffer] - 默认是`true`.<br />
4243
[page:Boolean resolveStencilBuffer] - 默认是`true`.<br />
4344
[page:Number samples] - 默认是`0`.<br />
4445
[page:Number count] - default is `1`.<br /><br />
@@ -99,9 +100,16 @@ <h3>[property:Boolean stencilBuffer]</h3>
99100
渲染到模板缓冲区。默认为false.
100101
</p>
101102

103+
<h3>[property:Boolean resolveDepthBuffer]</h3>
104+
<p>
105+
Defines whether the depth buffer should be resolved when rendering into a multisampled render target.
106+
默认为`true`.
107+
</p>
108+
102109
<h3>[property:Boolean resolveStencilBuffer]</h3>
103110
<p>
104111
Defines whether the stencil buffer should be resolved when rendering into a multisampled render target.
112+
This property has no effect when [page:.resolveDepthBuffer] is set to `false`.
105113
默认为`true`.
106114
</p>
107115

src/core/RenderTarget.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class RenderTarget extends EventDispatcher {
3434
minFilter: LinearFilter,
3535
depthBuffer: true,
3636
stencilBuffer: false,
37+
resolveDepthBuffer: true,
3738
resolveStencilBuffer: true,
3839
depthTexture: null,
3940
samples: 0,
@@ -59,6 +60,7 @@ class RenderTarget extends EventDispatcher {
5960
this.depthBuffer = options.depthBuffer;
6061
this.stencilBuffer = options.stencilBuffer;
6162

63+
this.resolveDepthBuffer = options.resolveDepthBuffer;
6264
this.resolveStencilBuffer = options.resolveStencilBuffer;
6365

6466
this.depthTexture = options.depthTexture;
@@ -138,6 +140,7 @@ class RenderTarget extends EventDispatcher {
138140
this.depthBuffer = source.depthBuffer;
139141
this.stencilBuffer = source.stencilBuffer;
140142

143+
this.resolveDepthBuffer = source.resolveDepthBuffer;
141144
this.resolveStencilBuffer = source.resolveStencilBuffer;
142145

143146
if ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();

src/renderers/WebGLRenderer.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1432,12 +1432,10 @@ class WebGLRenderer {
14321432
minFilter: LinearMipmapLinearFilter,
14331433
samples: 4,
14341434
stencilBuffer: stencil,
1435+
resolveDepthBuffer: false,
14351436
resolveStencilBuffer: false
14361437
} );
14371438

1438-
const renderTargetProperties = properties.get( currentRenderState.state.transmissionRenderTarget[ camera.id ] );
1439-
renderTargetProperties.__ignoreDepthValues = true;
1440-
14411439
// debug
14421440

14431441
/*

src/renderers/webgl/WebGLTextures.js

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1868,9 +1868,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
18681868

18691869
for ( let i = 0; i < textures.length; i ++ ) {
18701870

1871-
const ignoreDepthValues = ( renderTargetProperties.__ignoreDepthValues !== undefined ) ? renderTargetProperties.__ignoreDepthValues : false;
1872-
1873-
if ( ignoreDepthValues === false ) {
1871+
if ( renderTarget.resolveDepthBuffer ) {
18741872

18751873
if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
18761874

@@ -1898,7 +1896,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
18981896

18991897
invalidationArrayRead.push( _gl.COLOR_ATTACHMENT0 + i );
19001898

1901-
if ( renderTarget.depthBuffer && ignoreDepthValues === true ) {
1899+
if ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false ) {
19021900

19031901
invalidationArrayRead.push( depthStyle );
19041902
invalidationArrayDraw.push( depthStyle );
@@ -1937,10 +1935,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
19371935

19381936
} else {
19391937

1940-
const renderTargetProperties = properties.get( renderTarget );
1941-
const ignoreDepthValues = ( renderTargetProperties.__ignoreDepthValues !== undefined ) ? renderTargetProperties.__ignoreDepthValues : false;
1942-
1943-
if ( renderTarget.depthBuffer && ignoreDepthValues && supportsInvalidateFramebuffer ) {
1938+
if ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false && supportsInvalidateFramebuffer ) {
19441939

19451940
const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
19461941

src/renderers/webxr/WebXRManager.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -345,12 +345,10 @@ class WebXRManager extends EventDispatcher {
345345
depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
346346
stencilBuffer: attributes.stencil,
347347
colorSpace: renderer.outputColorSpace,
348-
samples: attributes.antialias ? 4 : 0
348+
samples: attributes.antialias ? 4 : 0,
349+
resolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false )
349350
} );
350351

351-
const renderTargetProperties = renderer.properties.get( newRenderTarget );
352-
renderTargetProperties.__ignoreDepthValues = glProjLayer.ignoreDepthValues;
353-
354352
}
355353

356354
newRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278

0 commit comments

Comments
 (0)