UNPKG

@forbespro/lead-agent

Version:
67 lines (66 loc) 2.92 kB
import { UniformsUtils as r, ShaderMaterial as a, NoBlending as p, WebGLRenderTarget as o, HalfFloatType as d, NearestFilter as h } from "three"; import { Pass as l, FullScreenQuad as n } from "./index52.js"; import { CopyShader as s } from "./index49.js"; import { AfterimageShader as i } from "./index53.js"; class S extends l { /** * Constructs a new after image pass. * * @param {number} [damp=0.96] - The damping intensity. A higher value means a stronger after image effect. */ constructor(e = 0.96) { super(), this.uniforms = r.clone(i.uniforms), this.uniforms.damp.value = e, this.compFsMaterial = new a({ uniforms: this.uniforms, vertexShader: i.vertexShader, fragmentShader: i.fragmentShader }), this.copyFsMaterial = new a({ uniforms: r.clone(s.uniforms), vertexShader: s.vertexShader, fragmentShader: s.fragmentShader, blending: p, depthTest: !1, depthWrite: !1 }), this._textureComp = new o(window.innerWidth, window.innerHeight, { magFilter: h, type: d }), this._textureOld = new o(window.innerWidth, window.innerHeight, { magFilter: h, type: d }), this._compFsQuad = new n(this.compFsMaterial), this._copyFsQuad = new n(this.copyFsMaterial); } /** * Performs the after image pass. * * @param {WebGLRenderer} renderer - The renderer. * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering * destination for the pass. * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the * previous pass from this buffer. * @param {number} deltaTime - The delta time in seconds. * @param {boolean} maskActive - Whether masking is active or not. */ render(e, t, u) { this.uniforms.tOld.value = this._textureOld.texture, this.uniforms.tNew.value = u.texture, e.setRenderTarget(this._textureComp), this._compFsQuad.render(e), this._copyFsQuad.material.uniforms.tDiffuse.value = this._textureComp.texture, this.renderToScreen ? (e.setRenderTarget(null), this._copyFsQuad.render(e)) : (e.setRenderTarget(t), this.clear && e.clear(), this._copyFsQuad.render(e)); const m = this._textureOld; this._textureOld = this._textureComp, this._textureComp = m; } /** * Sets the size of the pass. * * @param {number} width - The width to set. * @param {number} height - The width to set. */ setSize(e, t) { this._textureComp.setSize(e, t), this._textureOld.setSize(e, t); } /** * Frees the GPU-related resources allocated by this instance. Call this * method whenever the pass is no longer used in your app. */ dispose() { this._textureComp.dispose(), this._textureOld.dispose(), this.compFsMaterial.dispose(), this.copyFsMaterial.dispose(), this._compFsQuad.dispose(), this._copyFsQuad.dispose(); } } export { S as AfterimagePass };