1 | ( function () {
|
2 |
|
3 | class TexturePass extends THREE.Pass {
|
4 |
|
5 | constructor( map, opacity ) {
|
6 |
|
7 | super();
|
8 | if ( THREE.CopyShader === undefined ) console.error( 'THREE.TexturePass relies on THREE.CopyShader' );
|
9 | const shader = THREE.CopyShader;
|
10 | this.map = map;
|
11 | this.opacity = opacity !== undefined ? opacity : 1.0;
|
12 | this.uniforms = THREE.UniformsUtils.clone( shader.uniforms );
|
13 | this.material = new THREE.ShaderMaterial( {
|
14 | uniforms: this.uniforms,
|
15 | vertexShader: shader.vertexShader,
|
16 | fragmentShader: shader.fragmentShader,
|
17 | depthTest: false,
|
18 | depthWrite: false
|
19 | } );
|
20 | this.needsSwap = false;
|
21 | this.fsQuad = new THREE.FullScreenQuad( null );
|
22 |
|
23 | }
|
24 |
|
25 | render( renderer, writeBuffer, readBuffer
|
26 |
|
27 | ) {
|
28 |
|
29 | const oldAutoClear = renderer.autoClear;
|
30 | renderer.autoClear = false;
|
31 | this.fsQuad.material = this.material;
|
32 | this.uniforms[ 'opacity' ].value = this.opacity;
|
33 | this.uniforms[ 'tDiffuse' ].value = this.map;
|
34 | this.material.transparent = this.opacity < 1.0;
|
35 | renderer.setRenderTarget( this.renderToScreen ? null : readBuffer );
|
36 | if ( this.clear ) renderer.clear();
|
37 | this.fsQuad.render( renderer );
|
38 | renderer.autoClear = oldAutoClear;
|
39 |
|
40 | }
|
41 |
|
42 | }
|
43 |
|
44 | THREE.TexturePass = TexturePass;
|
45 |
|
46 | } )();
|