@@ -10,103 +10,155 @@ import { Pass, FullScreenQuad } from './Pass.js';
1010import { CopyShader } from '../shaders/CopyShader.js' ;
1111import { AfterimageShader } from '../shaders/AfterimageShader.js' ;
1212
13+ /**
14+ * Pass for a basic after image effect.
15+ *
16+ * ```js
17+ * const afterimagePass = new AfterimagePass( 0.9 );
18+ * composer.addPass( afterimagePass );
19+ * ```
20+ *
21+ * @augments Pass
22+ */
1323class AfterimagePass extends Pass {
1424
25+ /**
26+ * Constructs a new after image pass.
27+ *
28+ * @param {number } [damp=0.96] - The damping intensity. A higher value means a stronger after image effect.
29+ */
1530 constructor ( damp = 0.96 ) {
1631
1732 super ( ) ;
1833
19- this . shader = AfterimageShader ;
20-
21- this . uniforms = UniformsUtils . clone ( this . shader . uniforms ) ;
34+ /**
35+ * The pass uniforms. Use this object if you want to update the
36+ * `damp` value at runtime.
37+ * ```js
38+ * pass.uniforms.damp.value = 0.9;
39+ * ```
40+ *
41+ * @type {Object }
42+ */
43+ this . uniforms = UniformsUtils . clone ( AfterimageShader . uniforms ) ;
2244
2345 this . uniforms [ 'damp' ] . value = damp ;
2446
25- this . textureComp = new WebGLRenderTarget ( window . innerWidth , window . innerHeight , {
26- magFilter : NearestFilter ,
27- type : HalfFloatType
28- } ) ;
29-
30- this . textureOld = new WebGLRenderTarget ( window . innerWidth , window . innerHeight , {
31- magFilter : NearestFilter ,
32- type : HalfFloatType
33- } ) ;
34-
47+ /**
48+ * The composition material.
49+ *
50+ * @type {ShaderMaterial }
51+ */
3552 this . compFsMaterial = new ShaderMaterial ( {
3653
3754 uniforms : this . uniforms ,
38- vertexShader : this . shader . vertexShader ,
39- fragmentShader : this . shader . fragmentShader
55+ vertexShader : AfterimageShader . vertexShader ,
56+ fragmentShader : AfterimageShader . fragmentShader
4057
4158 } ) ;
4259
43- this . compFsQuad = new FullScreenQuad ( this . compFsMaterial ) ;
44-
45- const copyShader = CopyShader ;
46-
60+ /**
61+ * The copy material.
62+ *
63+ * @type {ShaderMaterial }
64+ */
4765 this . copyFsMaterial = new ShaderMaterial ( {
48- uniforms : UniformsUtils . clone ( copyShader . uniforms ) ,
49- vertexShader : copyShader . vertexShader ,
50- fragmentShader : copyShader . fragmentShader ,
66+ uniforms : UniformsUtils . clone ( CopyShader . uniforms ) ,
67+ vertexShader : CopyShader . vertexShader ,
68+ fragmentShader : CopyShader . fragmentShader ,
5169 blending : NoBlending ,
5270 depthTest : false ,
5371 depthWrite : false
5472 } ) ;
5573
56- this . copyFsQuad = new FullScreenQuad ( this . copyFsMaterial ) ;
74+ // internals
75+
76+ this . _textureComp = new WebGLRenderTarget ( window . innerWidth , window . innerHeight , {
77+ magFilter : NearestFilter ,
78+ type : HalfFloatType
79+ } ) ;
80+
81+ this . _textureOld = new WebGLRenderTarget ( window . innerWidth , window . innerHeight , {
82+ magFilter : NearestFilter ,
83+ type : HalfFloatType
84+ } ) ;
85+
86+ this . _compFsQuad = new FullScreenQuad ( this . compFsMaterial ) ;
87+ this . _copyFsQuad = new FullScreenQuad ( this . copyFsMaterial ) ;
5788
5889 }
5990
91+ /**
92+ * Performs the after image pass.
93+ *
94+ * @param {WebGLRenderer } renderer - The renderer.
95+ * @param {WebGLRenderTarget } writeBuffer - The write buffer. This buffer is intended as the rendering
96+ * destination for the pass.
97+ * @param {WebGLRenderTarget } readBuffer - The read buffer. The pass can access the result from the
98+ * previous pass from this buffer.
99+ * @param {number } deltaTime - The delta time in seconds.
100+ * @param {boolean } maskActive - Whether masking is active or not.
101+ */
60102 render ( renderer , writeBuffer , readBuffer /*, deltaTime, maskActive*/ ) {
61103
62- this . uniforms [ 'tOld' ] . value = this . textureOld . texture ;
104+ this . uniforms [ 'tOld' ] . value = this . _textureOld . texture ;
63105 this . uniforms [ 'tNew' ] . value = readBuffer . texture ;
64106
65- renderer . setRenderTarget ( this . textureComp ) ;
66- this . compFsQuad . render ( renderer ) ;
107+ renderer . setRenderTarget ( this . _textureComp ) ;
108+ this . _compFsQuad . render ( renderer ) ;
67109
68- this . copyFsQuad . material . uniforms . tDiffuse . value = this . textureComp . texture ;
110+ this . _copyFsQuad . material . uniforms . tDiffuse . value = this . _textureComp . texture ;
69111
70112 if ( this . renderToScreen ) {
71113
72114 renderer . setRenderTarget ( null ) ;
73- this . copyFsQuad . render ( renderer ) ;
115+ this . _copyFsQuad . render ( renderer ) ;
74116
75117 } else {
76118
77119 renderer . setRenderTarget ( writeBuffer ) ;
78120
79121 if ( this . clear ) renderer . clear ( ) ;
80122
81- this . copyFsQuad . render ( renderer ) ;
123+ this . _copyFsQuad . render ( renderer ) ;
82124
83125 }
84126
85127 // Swap buffers.
86- const temp = this . textureOld ;
87- this . textureOld = this . textureComp ;
88- this . textureComp = temp ;
128+ const temp = this . _textureOld ;
129+ this . _textureOld = this . _textureComp ;
130+ this . _textureComp = temp ;
89131 // Now textureOld contains the latest image, ready for the next frame.
90132
91133 }
92134
135+ /**
136+ * Sets the size of the pass.
137+ *
138+ * @param {number } width - The width to set.
139+ * @param {number } height - The width to set.
140+ */
93141 setSize ( width , height ) {
94142
95- this . textureComp . setSize ( width , height ) ;
96- this . textureOld . setSize ( width , height ) ;
143+ this . _textureComp . setSize ( width , height ) ;
144+ this . _textureOld . setSize ( width , height ) ;
97145
98146 }
99147
148+ /**
149+ * Frees the GPU-related resources allocated by this instance. Call this
150+ * method whenever the pass is no longer used in your app.
151+ */
100152 dispose ( ) {
101153
102- this . textureComp . dispose ( ) ;
103- this . textureOld . dispose ( ) ;
154+ this . _textureComp . dispose ( ) ;
155+ this . _textureOld . dispose ( ) ;
104156
105157 this . compFsMaterial . dispose ( ) ;
106158 this . copyFsMaterial . dispose ( ) ;
107159
108- this . compFsQuad . dispose ( ) ;
109- this . copyFsQuad . dispose ( ) ;
160+ this . _compFsQuad . dispose ( ) ;
161+ this . _copyFsQuad . dispose ( ) ;
110162
111163 }
112164
0 commit comments