Skip to content

Commit c221387

Browse files
authored
SSAAPassNode: Make clear color handling more consistent. (#33478)
1 parent 8777a3d commit c221387

2 files changed

Lines changed: 14 additions & 27 deletions

File tree

examples/jsm/tsl/display/SSAAPassNode.js

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { AdditiveBlending, Color, Vector2, RendererUtils, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
1+
import { AdditiveBlending, Color, Vector2, PassNode, QuadMesh, NodeMaterial } from 'three/webgpu';
22
import { uniform, mrt, texture, getTextureIndex, unpremultiplyAlpha } from 'three/tsl';
33

44
const _size = /*@__PURE__*/ new Vector2();
5-
6-
let _rendererState;
5+
const _clearColor = /*@__PURE__*/ new Color();
76

87
/**
98
* A special render pass node that renders the scene with SSAA (Supersampling Anti-Aliasing).
@@ -61,22 +60,6 @@ class SSAAPassNode extends PassNode {
6160
*/
6261
this.unbiased = true;
6362

64-
/**
65-
* The clear color of the pass.
66-
*
67-
* @type {Color}
68-
* @default 0x000000
69-
*/
70-
this.clearColor = new Color( 0x000000 );
71-
72-
/**
73-
* The clear alpha of the pass.
74-
*
75-
* @type {number}
76-
* @default 0
77-
*/
78-
this.clearAlpha = 0;
79-
8063
/**
8164
* A uniform node representing the sample weight.
8265
*
@@ -114,8 +97,6 @@ class SSAAPassNode extends PassNode {
11497
const { renderer } = frame;
11598
const { scene, camera } = this;
11699

117-
_rendererState = RendererUtils.resetRendererState( renderer, _rendererState );
118-
119100
//
120101

121102
this._pixelRatio = renderer.getPixelRatio();
@@ -130,6 +111,12 @@ class SSAAPassNode extends PassNode {
130111
this._cameraNear.value = camera.near;
131112
this._cameraFar.value = camera.far;
132113

114+
const currentRenderTarget = renderer.getRenderTarget();
115+
const currentMRT = renderer.getMRT();
116+
const currentAutoClear = renderer.autoClear;
117+
const currentClearColor = renderer.getClearColor( _clearColor );
118+
const currentClearAlpha = renderer.getClearAlpha();
119+
133120
renderer.setMRT( this.getMRT() );
134121
renderer.autoClear = false;
135122

@@ -186,7 +173,6 @@ class SSAAPassNode extends PassNode {
186173

187174
}
188175

189-
renderer.setClearColor( this.clearColor, this.clearAlpha );
190176
renderer.setRenderTarget( this._sampleRenderTarget );
191177
renderer.clear();
192178
renderer.render( scene, camera );
@@ -200,6 +186,8 @@ class SSAAPassNode extends PassNode {
200186
renderer.setClearColor( 0x000000, 0.0 );
201187
renderer.clear();
202188

189+
renderer.setClearColor( currentClearColor, currentClearAlpha );
190+
203191
}
204192

205193
this._quadMesh.render( renderer );
@@ -228,9 +216,9 @@ class SSAAPassNode extends PassNode {
228216

229217
}
230218

231-
//
232-
233-
RendererUtils.restoreRendererState( renderer, _rendererState );
219+
renderer.setRenderTarget( currentRenderTarget );
220+
renderer.setMRT( currentMRT );
221+
renderer.autoClear = currentAutoClear;
234222

235223
}
236224

examples/webgpu_postprocessing_ssaa.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,7 @@
194194

195195
}
196196

197-
ssaaRenderPass.clearColor.set( newColor );
198-
ssaaRenderPass.clearAlpha = params.clearAlpha;
197+
renderer.setClearColor( newColor, params.clearAlpha );
199198

200199
ssaaRenderPass.sampleLevel = params.sampleLevel;
201200

0 commit comments

Comments
 (0)