Spaces:
Running
Running
File size: 1,440 Bytes
a28eca3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
import {
HalfFloatType,
NoBlending,
ShaderMaterial,
UniformsUtils,
WebGLRenderTarget
} from 'three';
import { Pass, FullScreenQuad } from './Pass.js';
import { CopyShader } from '../shaders/CopyShader.js';
class SavePass extends Pass {
constructor( renderTarget ) {
super();
const shader = CopyShader;
this.textureID = 'tDiffuse';
this.uniforms = UniformsUtils.clone( shader.uniforms );
this.material = new ShaderMaterial( {
uniforms: this.uniforms,
vertexShader: shader.vertexShader,
fragmentShader: shader.fragmentShader,
blending: NoBlending
} );
this.renderTarget = renderTarget;
if ( this.renderTarget === undefined ) {
this.renderTarget = new WebGLRenderTarget( 1, 1, { type: HalfFloatType } ); // will be resized later
this.renderTarget.texture.name = 'SavePass.rt';
}
this.needsSwap = false;
this.fsQuad = new FullScreenQuad( this.material );
}
render( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive */ ) {
if ( this.uniforms[ this.textureID ] ) {
this.uniforms[ this.textureID ].value = readBuffer.texture;
}
renderer.setRenderTarget( this.renderTarget );
if ( this.clear ) renderer.clear();
this.fsQuad.render( renderer );
}
setSize( width, height ) {
this.renderTarget.setSize( width, height );
}
dispose() {
this.renderTarget.dispose();
this.material.dispose();
this.fsQuad.dispose();
}
}
export { SavePass };
|