aboutsummaryrefslogtreecommitdiff
path: root/downloads/ShaderPass.js
diff options
context:
space:
mode:
Diffstat (limited to 'downloads/ShaderPass.js')
-rw-r--r--downloads/ShaderPass.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/downloads/ShaderPass.js b/downloads/ShaderPass.js
new file mode 100644
index 0000000..9c508b3
--- /dev/null
+++ b/downloads/ShaderPass.js
@@ -0,0 +1,63 @@
+( function () {
+
+ class ShaderPass extends THREE.Pass {
+
+ constructor( shader, textureID ) {
+
+ super();
+ this.textureID = textureID !== undefined ? textureID : 'tDiffuse';
+
+ if ( shader instanceof THREE.ShaderMaterial ) {
+
+ this.uniforms = shader.uniforms;
+ this.material = shader;
+
+ } else if ( shader ) {
+
+ this.uniforms = THREE.UniformsUtils.clone( shader.uniforms );
+ this.material = new THREE.ShaderMaterial( {
+ defines: Object.assign( {}, shader.defines ),
+ uniforms: this.uniforms,
+ vertexShader: shader.vertexShader,
+ fragmentShader: shader.fragmentShader
+ } );
+
+ }
+
+ this.fsQuad = new THREE.FullScreenQuad( this.material );
+
+ }
+
+ render( renderer, writeBuffer, readBuffer
+ /*, deltaTime, maskActive */
+ ) {
+
+ if ( this.uniforms[ this.textureID ] ) {
+
+ this.uniforms[ this.textureID ].value = readBuffer.texture;
+
+ }
+
+ this.fsQuad.material = this.material;
+
+ if ( this.renderToScreen ) {
+
+ renderer.setRenderTarget( null );
+ this.fsQuad.render( renderer );
+
+ } else {
+
+ renderer.setRenderTarget( writeBuffer ); // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600
+
+ if ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );
+ this.fsQuad.render( renderer );
+
+ }
+
+ }
+
+ }
+
+ THREE.ShaderPass = ShaderPass;
+
+} )();