three-stdlib 2.32.2 → 2.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "three-stdlib",
3
- "version": "2.32.2",
3
+ "version": "2.33.0",
4
4
  "description": "stand-alone library of threejs examples",
5
5
  "keywords": [
6
6
  "three",
@@ -153,6 +153,11 @@ class EffectComposer {
153
153
  this._pixelRatio = pixelRatio;
154
154
  this.setSize(this._width, this._height);
155
155
  }
156
+ dispose() {
157
+ this.renderTarget1.dispose();
158
+ this.renderTarget2.dispose();
159
+ this.copyPass.dispose();
160
+ }
156
161
  }
157
162
  exports.EffectComposer = EffectComposer;
158
163
  //# sourceMappingURL=EffectComposer.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"EffectComposer.cjs","sources":["../../src/postprocessing/EffectComposer.ts"],"sourcesContent":["import { Clock, LinearFilter, RGBAFormat, NoBlending, Vector2, WebGLRenderer, WebGLRenderTarget } from 'three'\nimport { CopyShader } from '../shaders/CopyShader'\nimport { ShaderPass } from './ShaderPass'\nimport { MaskPass, ClearMaskPass } from './MaskPass'\nimport { Pass } from './Pass'\n\nclass EffectComposer<TRenderTarget extends WebGLRenderTarget = WebGLRenderTarget> {\n public renderer: WebGLRenderer\n private _pixelRatio: number\n private _width: number\n private _height: number\n public renderTarget1: WebGLRenderTarget\n public renderTarget2: WebGLRenderTarget\n public writeBuffer: WebGLRenderTarget\n public readBuffer: WebGLRenderTarget\n public renderToScreen: boolean\n public passes: Pass[] = []\n public copyPass: Pass\n public clock: Clock\n\n constructor(renderer: WebGLRenderer, renderTarget?: TRenderTarget) {\n this.renderer = renderer\n\n if (renderTarget === undefined) {\n const parameters = {\n minFilter: LinearFilter,\n magFilter: LinearFilter,\n format: RGBAFormat,\n }\n\n const size = renderer.getSize(new Vector2())\n this._pixelRatio = renderer.getPixelRatio()\n this._width = size.width\n this._height = size.height\n\n renderTarget = new WebGLRenderTarget(\n this._width * this._pixelRatio,\n this._height * this._pixelRatio,\n parameters,\n ) as TRenderTarget\n renderTarget.texture.name = 'EffectComposer.rt1'\n } else {\n this._pixelRatio = 1\n this._width = renderTarget.width\n this._height = renderTarget.height\n }\n\n this.renderTarget1 = renderTarget\n this.renderTarget2 = renderTarget.clone()\n this.renderTarget2.texture.name = 'EffectComposer.rt2'\n\n this.writeBuffer = this.renderTarget1\n this.readBuffer = this.renderTarget2\n\n this.renderToScreen = true\n\n // dependencies\n\n if (CopyShader === undefined) {\n console.error('THREE.EffectComposer relies on CopyShader')\n }\n\n if (ShaderPass === undefined) {\n console.error('THREE.EffectComposer relies on ShaderPass')\n }\n\n this.copyPass = new ShaderPass(CopyShader)\n // @ts-ignore\n this.copyPass.material.blending = NoBlending\n\n this.clock = new Clock()\n }\n\n public swapBuffers(): void {\n const tmp = this.readBuffer\n this.readBuffer = this.writeBuffer\n this.writeBuffer = tmp\n }\n\n public addPass(pass: Pass): void {\n this.passes.push(pass)\n pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio)\n }\n\n public insertPass(pass: Pass, index: number): void {\n this.passes.splice(index, 0, pass)\n pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio)\n }\n\n public removePass(pass: Pass): void {\n const index = this.passes.indexOf(pass)\n\n if (index !== -1) {\n this.passes.splice(index, 1)\n }\n }\n\n public isLastEnabledPass(passIndex: number): boolean {\n for (let i = passIndex + 1; i < this.passes.length; i++) {\n if (this.passes[i].enabled) {\n return false\n }\n }\n\n return true\n }\n\n public render(deltaTime?: number): void {\n // deltaTime value is in seconds\n\n if (deltaTime === undefined) {\n deltaTime = this.clock.getDelta()\n }\n\n const currentRenderTarget = this.renderer.getRenderTarget()\n\n let maskActive = false\n\n const il = this.passes.length\n\n for (let i = 0; i < il; i++) {\n const pass = this.passes[i]\n\n if (pass.enabled === false) continue\n\n pass.renderToScreen = this.renderToScreen && this.isLastEnabledPass(i)\n pass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive)\n\n if (pass.needsSwap) {\n if (maskActive) {\n const context = this.renderer.getContext()\n const stencil = this.renderer.state.buffers.stencil\n\n //context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n stencil.setFunc(context.NOTEQUAL, 1, 0xffffffff)\n\n this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime)\n\n //context.stencilFunc( context.EQUAL, 1, 0xffffffff );\n stencil.setFunc(context.EQUAL, 1, 0xffffffff)\n }\n\n this.swapBuffers()\n }\n\n if (MaskPass !== undefined) {\n if (pass instanceof MaskPass) {\n maskActive = true\n } else if (pass instanceof ClearMaskPass) {\n maskActive = false\n }\n }\n }\n\n this.renderer.setRenderTarget(currentRenderTarget)\n }\n\n public reset(renderTarget: WebGLRenderTarget): void {\n if (renderTarget === undefined) {\n const size = this.renderer.getSize(new Vector2())\n this._pixelRatio = this.renderer.getPixelRatio()\n this._width = size.width\n this._height = size.height\n\n renderTarget = this.renderTarget1.clone()\n renderTarget.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio)\n }\n\n this.renderTarget1.dispose()\n this.renderTarget2.dispose()\n this.renderTarget1 = renderTarget\n this.renderTarget2 = renderTarget.clone()\n\n this.writeBuffer = this.renderTarget1\n this.readBuffer = this.renderTarget2\n }\n\n public setSize(width: number, height: number): void {\n this._width = width\n this._height = height\n\n const effectiveWidth = this._width * this._pixelRatio\n const effectiveHeight = this._height * this._pixelRatio\n\n this.renderTarget1.setSize(effectiveWidth, effectiveHeight)\n this.renderTarget2.setSize(effectiveWidth, effectiveHeight)\n\n for (let i = 0; i < this.passes.length; i++) {\n this.passes[i].setSize(effectiveWidth, effectiveHeight)\n }\n }\n\n public setPixelRatio(pixelRatio: number): void {\n this._pixelRatio = pixelRatio\n\n this.setSize(this._width, this._height)\n }\n}\n\nexport { EffectComposer }\n"],"names":["LinearFilter","RGBAFormat","Vector2","WebGLRenderTarget","CopyShader","ShaderPass","NoBlending","Clock","MaskPass","ClearMaskPass"],"mappings":"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"}
1
+ {"version":3,"file":"EffectComposer.cjs","sources":["../../src/postprocessing/EffectComposer.ts"],"sourcesContent":["import { Clock, LinearFilter, RGBAFormat, NoBlending, Vector2, WebGLRenderer, WebGLRenderTarget } from 'three'\nimport { CopyShader } from '../shaders/CopyShader'\nimport { ShaderPass } from './ShaderPass'\nimport { MaskPass, ClearMaskPass } from './MaskPass'\nimport { Pass } from './Pass'\n\nclass EffectComposer<TRenderTarget extends WebGLRenderTarget = WebGLRenderTarget> {\n public renderer: WebGLRenderer\n private _pixelRatio: number\n private _width: number\n private _height: number\n public renderTarget1: WebGLRenderTarget\n public renderTarget2: WebGLRenderTarget\n public writeBuffer: WebGLRenderTarget\n public readBuffer: WebGLRenderTarget\n public renderToScreen: boolean\n public passes: Pass[] = []\n public copyPass: Pass\n public clock: Clock\n\n constructor(renderer: WebGLRenderer, renderTarget?: TRenderTarget) {\n this.renderer = renderer\n\n if (renderTarget === undefined) {\n const parameters = {\n minFilter: LinearFilter,\n magFilter: LinearFilter,\n format: RGBAFormat,\n }\n\n const size = renderer.getSize(new Vector2())\n this._pixelRatio = renderer.getPixelRatio()\n this._width = size.width\n this._height = size.height\n\n renderTarget = new WebGLRenderTarget(\n this._width * this._pixelRatio,\n this._height * this._pixelRatio,\n parameters,\n ) as TRenderTarget\n renderTarget.texture.name = 'EffectComposer.rt1'\n } else {\n this._pixelRatio = 1\n this._width = renderTarget.width\n this._height = renderTarget.height\n }\n\n this.renderTarget1 = renderTarget\n this.renderTarget2 = renderTarget.clone()\n this.renderTarget2.texture.name = 'EffectComposer.rt2'\n\n this.writeBuffer = this.renderTarget1\n this.readBuffer = this.renderTarget2\n\n this.renderToScreen = true\n\n // dependencies\n\n if (CopyShader === undefined) {\n console.error('THREE.EffectComposer relies on CopyShader')\n }\n\n if (ShaderPass === undefined) {\n console.error('THREE.EffectComposer relies on ShaderPass')\n }\n\n this.copyPass = new ShaderPass(CopyShader)\n // @ts-ignore\n this.copyPass.material.blending = NoBlending\n\n this.clock = new Clock()\n }\n\n public swapBuffers(): void {\n const tmp = this.readBuffer\n this.readBuffer = this.writeBuffer\n this.writeBuffer = tmp\n }\n\n public addPass(pass: Pass): void {\n this.passes.push(pass)\n pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio)\n }\n\n public insertPass(pass: Pass, index: number): void {\n this.passes.splice(index, 0, pass)\n pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio)\n }\n\n public removePass(pass: Pass): void {\n const index = this.passes.indexOf(pass)\n\n if (index !== -1) {\n this.passes.splice(index, 1)\n }\n }\n\n public isLastEnabledPass(passIndex: number): boolean {\n for (let i = passIndex + 1; i < this.passes.length; i++) {\n if (this.passes[i].enabled) {\n return false\n }\n }\n\n return true\n }\n\n public render(deltaTime?: number): void {\n // deltaTime value is in seconds\n\n if (deltaTime === undefined) {\n deltaTime = this.clock.getDelta()\n }\n\n const currentRenderTarget = this.renderer.getRenderTarget()\n\n let maskActive = false\n\n const il = this.passes.length\n\n for (let i = 0; i < il; i++) {\n const pass = this.passes[i]\n\n if (pass.enabled === false) continue\n\n pass.renderToScreen = this.renderToScreen && this.isLastEnabledPass(i)\n pass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive)\n\n if (pass.needsSwap) {\n if (maskActive) {\n const context = this.renderer.getContext()\n const stencil = this.renderer.state.buffers.stencil\n\n //context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n stencil.setFunc(context.NOTEQUAL, 1, 0xffffffff)\n\n this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime)\n\n //context.stencilFunc( context.EQUAL, 1, 0xffffffff );\n stencil.setFunc(context.EQUAL, 1, 0xffffffff)\n }\n\n this.swapBuffers()\n }\n\n if (MaskPass !== undefined) {\n if (pass instanceof MaskPass) {\n maskActive = true\n } else if (pass instanceof ClearMaskPass) {\n maskActive = false\n }\n }\n }\n\n this.renderer.setRenderTarget(currentRenderTarget)\n }\n\n public reset(renderTarget: WebGLRenderTarget): void {\n if (renderTarget === undefined) {\n const size = this.renderer.getSize(new Vector2())\n this._pixelRatio = this.renderer.getPixelRatio()\n this._width = size.width\n this._height = size.height\n\n renderTarget = this.renderTarget1.clone()\n renderTarget.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio)\n }\n\n this.renderTarget1.dispose()\n this.renderTarget2.dispose()\n this.renderTarget1 = renderTarget\n this.renderTarget2 = renderTarget.clone()\n\n this.writeBuffer = this.renderTarget1\n this.readBuffer = this.renderTarget2\n }\n\n public setSize(width: number, height: number): void {\n this._width = width\n this._height = height\n\n const effectiveWidth = this._width * this._pixelRatio\n const effectiveHeight = this._height * this._pixelRatio\n\n this.renderTarget1.setSize(effectiveWidth, effectiveHeight)\n this.renderTarget2.setSize(effectiveWidth, effectiveHeight)\n\n for (let i = 0; i < this.passes.length; i++) {\n this.passes[i].setSize(effectiveWidth, effectiveHeight)\n }\n }\n\n public setPixelRatio(pixelRatio: number): void {\n this._pixelRatio = pixelRatio\n\n this.setSize(this._width, this._height)\n }\n\n public dispose() {\n this.renderTarget1.dispose()\n this.renderTarget2.dispose()\n\n this.copyPass.dispose()\n }\n}\n\nexport { EffectComposer }\n"],"names":["LinearFilter","RGBAFormat","Vector2","WebGLRenderTarget","CopyShader","ShaderPass","NoBlending","Clock","MaskPass","ClearMaskPass"],"mappings":"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"}
@@ -23,5 +23,6 @@ declare class EffectComposer<TRenderTarget extends WebGLRenderTarget = WebGLRend
23
23
  reset(renderTarget: WebGLRenderTarget): void;
24
24
  setSize(width: number, height: number): void;
25
25
  setPixelRatio(pixelRatio: number): void;
26
+ dispose(): void;
26
27
  }
27
28
  export { EffectComposer };
@@ -151,6 +151,11 @@ class EffectComposer {
151
151
  this._pixelRatio = pixelRatio;
152
152
  this.setSize(this._width, this._height);
153
153
  }
154
+ dispose() {
155
+ this.renderTarget1.dispose();
156
+ this.renderTarget2.dispose();
157
+ this.copyPass.dispose();
158
+ }
154
159
  }
155
160
  export {
156
161
  EffectComposer
@@ -1 +1 @@
1
- {"version":3,"file":"EffectComposer.js","sources":["../../src/postprocessing/EffectComposer.ts"],"sourcesContent":["import { Clock, LinearFilter, RGBAFormat, NoBlending, Vector2, WebGLRenderer, WebGLRenderTarget } from 'three'\nimport { CopyShader } from '../shaders/CopyShader'\nimport { ShaderPass } from './ShaderPass'\nimport { MaskPass, ClearMaskPass } from './MaskPass'\nimport { Pass } from './Pass'\n\nclass EffectComposer<TRenderTarget extends WebGLRenderTarget = WebGLRenderTarget> {\n public renderer: WebGLRenderer\n private _pixelRatio: number\n private _width: number\n private _height: number\n public renderTarget1: WebGLRenderTarget\n public renderTarget2: WebGLRenderTarget\n public writeBuffer: WebGLRenderTarget\n public readBuffer: WebGLRenderTarget\n public renderToScreen: boolean\n public passes: Pass[] = []\n public copyPass: Pass\n public clock: Clock\n\n constructor(renderer: WebGLRenderer, renderTarget?: TRenderTarget) {\n this.renderer = renderer\n\n if (renderTarget === undefined) {\n const parameters = {\n minFilter: LinearFilter,\n magFilter: LinearFilter,\n format: RGBAFormat,\n }\n\n const size = renderer.getSize(new Vector2())\n this._pixelRatio = renderer.getPixelRatio()\n this._width = size.width\n this._height = size.height\n\n renderTarget = new WebGLRenderTarget(\n this._width * this._pixelRatio,\n this._height * this._pixelRatio,\n parameters,\n ) as TRenderTarget\n renderTarget.texture.name = 'EffectComposer.rt1'\n } else {\n this._pixelRatio = 1\n this._width = renderTarget.width\n this._height = renderTarget.height\n }\n\n this.renderTarget1 = renderTarget\n this.renderTarget2 = renderTarget.clone()\n this.renderTarget2.texture.name = 'EffectComposer.rt2'\n\n this.writeBuffer = this.renderTarget1\n this.readBuffer = this.renderTarget2\n\n this.renderToScreen = true\n\n // dependencies\n\n if (CopyShader === undefined) {\n console.error('THREE.EffectComposer relies on CopyShader')\n }\n\n if (ShaderPass === undefined) {\n console.error('THREE.EffectComposer relies on ShaderPass')\n }\n\n this.copyPass = new ShaderPass(CopyShader)\n // @ts-ignore\n this.copyPass.material.blending = NoBlending\n\n this.clock = new Clock()\n }\n\n public swapBuffers(): void {\n const tmp = this.readBuffer\n this.readBuffer = this.writeBuffer\n this.writeBuffer = tmp\n }\n\n public addPass(pass: Pass): void {\n this.passes.push(pass)\n pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio)\n }\n\n public insertPass(pass: Pass, index: number): void {\n this.passes.splice(index, 0, pass)\n pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio)\n }\n\n public removePass(pass: Pass): void {\n const index = this.passes.indexOf(pass)\n\n if (index !== -1) {\n this.passes.splice(index, 1)\n }\n }\n\n public isLastEnabledPass(passIndex: number): boolean {\n for (let i = passIndex + 1; i < this.passes.length; i++) {\n if (this.passes[i].enabled) {\n return false\n }\n }\n\n return true\n }\n\n public render(deltaTime?: number): void {\n // deltaTime value is in seconds\n\n if (deltaTime === undefined) {\n deltaTime = this.clock.getDelta()\n }\n\n const currentRenderTarget = this.renderer.getRenderTarget()\n\n let maskActive = false\n\n const il = this.passes.length\n\n for (let i = 0; i < il; i++) {\n const pass = this.passes[i]\n\n if (pass.enabled === false) continue\n\n pass.renderToScreen = this.renderToScreen && this.isLastEnabledPass(i)\n pass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive)\n\n if (pass.needsSwap) {\n if (maskActive) {\n const context = this.renderer.getContext()\n const stencil = this.renderer.state.buffers.stencil\n\n //context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n stencil.setFunc(context.NOTEQUAL, 1, 0xffffffff)\n\n this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime)\n\n //context.stencilFunc( context.EQUAL, 1, 0xffffffff );\n stencil.setFunc(context.EQUAL, 1, 0xffffffff)\n }\n\n this.swapBuffers()\n }\n\n if (MaskPass !== undefined) {\n if (pass instanceof MaskPass) {\n maskActive = true\n } else if (pass instanceof ClearMaskPass) {\n maskActive = false\n }\n }\n }\n\n this.renderer.setRenderTarget(currentRenderTarget)\n }\n\n public reset(renderTarget: WebGLRenderTarget): void {\n if (renderTarget === undefined) {\n const size = this.renderer.getSize(new Vector2())\n this._pixelRatio = this.renderer.getPixelRatio()\n this._width = size.width\n this._height = size.height\n\n renderTarget = this.renderTarget1.clone()\n renderTarget.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio)\n }\n\n this.renderTarget1.dispose()\n this.renderTarget2.dispose()\n this.renderTarget1 = renderTarget\n this.renderTarget2 = renderTarget.clone()\n\n this.writeBuffer = this.renderTarget1\n this.readBuffer = this.renderTarget2\n }\n\n public setSize(width: number, height: number): void {\n this._width = width\n this._height = height\n\n const effectiveWidth = this._width * this._pixelRatio\n const effectiveHeight = this._height * this._pixelRatio\n\n this.renderTarget1.setSize(effectiveWidth, effectiveHeight)\n this.renderTarget2.setSize(effectiveWidth, effectiveHeight)\n\n for (let i = 0; i < this.passes.length; i++) {\n this.passes[i].setSize(effectiveWidth, effectiveHeight)\n }\n }\n\n public setPixelRatio(pixelRatio: number): void {\n this._pixelRatio = pixelRatio\n\n this.setSize(this._width, this._height)\n }\n}\n\nexport { EffectComposer }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EffectComposer.js","sources":["../../src/postprocessing/EffectComposer.ts"],"sourcesContent":["import { Clock, LinearFilter, RGBAFormat, NoBlending, Vector2, WebGLRenderer, WebGLRenderTarget } from 'three'\nimport { CopyShader } from '../shaders/CopyShader'\nimport { ShaderPass } from './ShaderPass'\nimport { MaskPass, ClearMaskPass } from './MaskPass'\nimport { Pass } from './Pass'\n\nclass EffectComposer<TRenderTarget extends WebGLRenderTarget = WebGLRenderTarget> {\n public renderer: WebGLRenderer\n private _pixelRatio: number\n private _width: number\n private _height: number\n public renderTarget1: WebGLRenderTarget\n public renderTarget2: WebGLRenderTarget\n public writeBuffer: WebGLRenderTarget\n public readBuffer: WebGLRenderTarget\n public renderToScreen: boolean\n public passes: Pass[] = []\n public copyPass: Pass\n public clock: Clock\n\n constructor(renderer: WebGLRenderer, renderTarget?: TRenderTarget) {\n this.renderer = renderer\n\n if (renderTarget === undefined) {\n const parameters = {\n minFilter: LinearFilter,\n magFilter: LinearFilter,\n format: RGBAFormat,\n }\n\n const size = renderer.getSize(new Vector2())\n this._pixelRatio = renderer.getPixelRatio()\n this._width = size.width\n this._height = size.height\n\n renderTarget = new WebGLRenderTarget(\n this._width * this._pixelRatio,\n this._height * this._pixelRatio,\n parameters,\n ) as TRenderTarget\n renderTarget.texture.name = 'EffectComposer.rt1'\n } else {\n this._pixelRatio = 1\n this._width = renderTarget.width\n this._height = renderTarget.height\n }\n\n this.renderTarget1 = renderTarget\n this.renderTarget2 = renderTarget.clone()\n this.renderTarget2.texture.name = 'EffectComposer.rt2'\n\n this.writeBuffer = this.renderTarget1\n this.readBuffer = this.renderTarget2\n\n this.renderToScreen = true\n\n // dependencies\n\n if (CopyShader === undefined) {\n console.error('THREE.EffectComposer relies on CopyShader')\n }\n\n if (ShaderPass === undefined) {\n console.error('THREE.EffectComposer relies on ShaderPass')\n }\n\n this.copyPass = new ShaderPass(CopyShader)\n // @ts-ignore\n this.copyPass.material.blending = NoBlending\n\n this.clock = new Clock()\n }\n\n public swapBuffers(): void {\n const tmp = this.readBuffer\n this.readBuffer = this.writeBuffer\n this.writeBuffer = tmp\n }\n\n public addPass(pass: Pass): void {\n this.passes.push(pass)\n pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio)\n }\n\n public insertPass(pass: Pass, index: number): void {\n this.passes.splice(index, 0, pass)\n pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio)\n }\n\n public removePass(pass: Pass): void {\n const index = this.passes.indexOf(pass)\n\n if (index !== -1) {\n this.passes.splice(index, 1)\n }\n }\n\n public isLastEnabledPass(passIndex: number): boolean {\n for (let i = passIndex + 1; i < this.passes.length; i++) {\n if (this.passes[i].enabled) {\n return false\n }\n }\n\n return true\n }\n\n public render(deltaTime?: number): void {\n // deltaTime value is in seconds\n\n if (deltaTime === undefined) {\n deltaTime = this.clock.getDelta()\n }\n\n const currentRenderTarget = this.renderer.getRenderTarget()\n\n let maskActive = false\n\n const il = this.passes.length\n\n for (let i = 0; i < il; i++) {\n const pass = this.passes[i]\n\n if (pass.enabled === false) continue\n\n pass.renderToScreen = this.renderToScreen && this.isLastEnabledPass(i)\n pass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive)\n\n if (pass.needsSwap) {\n if (maskActive) {\n const context = this.renderer.getContext()\n const stencil = this.renderer.state.buffers.stencil\n\n //context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n stencil.setFunc(context.NOTEQUAL, 1, 0xffffffff)\n\n this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime)\n\n //context.stencilFunc( context.EQUAL, 1, 0xffffffff );\n stencil.setFunc(context.EQUAL, 1, 0xffffffff)\n }\n\n this.swapBuffers()\n }\n\n if (MaskPass !== undefined) {\n if (pass instanceof MaskPass) {\n maskActive = true\n } else if (pass instanceof ClearMaskPass) {\n maskActive = false\n }\n }\n }\n\n this.renderer.setRenderTarget(currentRenderTarget)\n }\n\n public reset(renderTarget: WebGLRenderTarget): void {\n if (renderTarget === undefined) {\n const size = this.renderer.getSize(new Vector2())\n this._pixelRatio = this.renderer.getPixelRatio()\n this._width = size.width\n this._height = size.height\n\n renderTarget = this.renderTarget1.clone()\n renderTarget.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio)\n }\n\n this.renderTarget1.dispose()\n this.renderTarget2.dispose()\n this.renderTarget1 = renderTarget\n this.renderTarget2 = renderTarget.clone()\n\n this.writeBuffer = this.renderTarget1\n this.readBuffer = this.renderTarget2\n }\n\n public setSize(width: number, height: number): void {\n this._width = width\n this._height = height\n\n const effectiveWidth = this._width * this._pixelRatio\n const effectiveHeight = this._height * this._pixelRatio\n\n this.renderTarget1.setSize(effectiveWidth, effectiveHeight)\n this.renderTarget2.setSize(effectiveWidth, effectiveHeight)\n\n for (let i = 0; i < this.passes.length; i++) {\n this.passes[i].setSize(effectiveWidth, effectiveHeight)\n }\n }\n\n public setPixelRatio(pixelRatio: number): void {\n this._pixelRatio = pixelRatio\n\n this.setSize(this._width, this._height)\n }\n\n public dispose() {\n this.renderTarget1.dispose()\n this.renderTarget2.dispose()\n\n this.copyPass.dispose()\n }\n}\n\nexport { EffectComposer }\n"],"names":[],"mappings":"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"}
@@ -23,6 +23,8 @@ class Pass {
23
23
  render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) {
24
24
  console.error("THREE.Pass: .render() must be implemented in derived pass.");
25
25
  }
26
+ dispose() {
27
+ }
26
28
  }
27
29
  class FullScreenQuad {
28
30
  constructor(material) {
@@ -1 +1 @@
1
- {"version":3,"file":"Pass.cjs","sources":["../../src/postprocessing/Pass.ts"],"sourcesContent":["import { OrthographicCamera, PlaneGeometry, Mesh, Material, Renderer, WebGLRenderer, WebGLRenderTarget } from 'three'\n\nclass Pass {\n // if set to true, the pass is processed by the composer\n public enabled = true\n\n // if set to true, the pass indicates to swap read and write buffer after rendering\n public needsSwap = true\n\n // if set to true, the pass clears its buffer before rendering\n public clear = false\n\n // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n public renderToScreen = false\n\n public setSize(width: number, height: number): void {}\n\n public render(\n renderer: WebGLRenderer,\n writeBuffer: WebGLRenderTarget,\n readBuffer: WebGLRenderTarget,\n deltaTime: number,\n maskActive?: unknown,\n ): void {\n console.error('THREE.Pass: .render() must be implemented in derived pass.')\n }\n}\n\n// Helper for passes that need to fill the viewport with a single quad.\nclass FullScreenQuad<TMaterial extends Material = Material> {\n public camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1)\n public geometry = new PlaneGeometry(2, 2)\n private mesh: Mesh<PlaneGeometry, TMaterial>\n\n constructor(material: TMaterial) {\n this.mesh = new Mesh(this.geometry, material)\n }\n\n public get material(): TMaterial {\n return this.mesh.material\n }\n\n public set material(value: TMaterial) {\n this.mesh.material = value\n }\n\n public dispose(): void {\n this.mesh.geometry.dispose()\n }\n\n public render(renderer: Renderer): void {\n renderer.render(this.mesh, this.camera)\n }\n}\n\nexport { Pass, FullScreenQuad }\n"],"names":["OrthographicCamera","PlaneGeometry","Mesh"],"mappings":";;;;;;;;;AAEA,MAAM,KAAK;AAAA,EAAX;AAES;AAAA,mCAAU;AAGV;AAAA,qCAAY;AAGZ;AAAA,iCAAQ;AAGR;AAAA,0CAAiB;AAAA;AAAA,EAEjB,QAAQ,OAAe,QAAsB;AAAA,EAAC;AAAA,EAE9C,OACL,UACA,aACA,YACA,WACA,YACM;AACN,YAAQ,MAAM,4DAA4D;AAAA,EAC5E;AACF;AAGA,MAAM,eAAsD;AAAA,EAK1D,YAAY,UAAqB;AAJ1B,kCAAS,IAAIA,yBAAmB,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC;AAClD,oCAAW,IAAIC,MAAAA,cAAc,GAAG,CAAC;AAChC;AAGN,SAAK,OAAO,IAAIC,MAAAA,KAAK,KAAK,UAAU,QAAQ;AAAA,EAC9C;AAAA,EAEA,IAAW,WAAsB;AAC/B,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAW,SAAS,OAAkB;AACpC,SAAK,KAAK,WAAW;AAAA,EACvB;AAAA,EAEO,UAAgB;AAChB,SAAA,KAAK,SAAS;EACrB;AAAA,EAEO,OAAO,UAA0B;AACtC,aAAS,OAAO,KAAK,MAAM,KAAK,MAAM;AAAA,EACxC;AACF;;;"}
1
+ {"version":3,"file":"Pass.cjs","sources":["../../src/postprocessing/Pass.ts"],"sourcesContent":["import { OrthographicCamera, PlaneGeometry, Mesh, Material, Renderer, WebGLRenderer, WebGLRenderTarget } from 'three'\n\nclass Pass {\n // if set to true, the pass is processed by the composer\n public enabled = true\n\n // if set to true, the pass indicates to swap read and write buffer after rendering\n public needsSwap = true\n\n // if set to true, the pass clears its buffer before rendering\n public clear = false\n\n // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n public renderToScreen = false\n\n public setSize(width: number, height: number): void {}\n\n public render(\n renderer: WebGLRenderer,\n writeBuffer: WebGLRenderTarget,\n readBuffer: WebGLRenderTarget,\n deltaTime: number,\n maskActive?: unknown,\n ): void {\n console.error('THREE.Pass: .render() must be implemented in derived pass.')\n }\n\n public dispose() {}\n}\n\n// Helper for passes that need to fill the viewport with a single quad.\nclass FullScreenQuad<TMaterial extends Material = Material> {\n public camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1)\n public geometry = new PlaneGeometry(2, 2)\n private mesh: Mesh<PlaneGeometry, TMaterial>\n\n constructor(material: TMaterial) {\n this.mesh = new Mesh(this.geometry, material)\n }\n\n public get material(): TMaterial {\n return this.mesh.material\n }\n\n public set material(value: TMaterial) {\n this.mesh.material = value\n }\n\n public dispose(): void {\n this.mesh.geometry.dispose()\n }\n\n public render(renderer: Renderer): void {\n renderer.render(this.mesh, this.camera)\n }\n}\n\nexport { Pass, FullScreenQuad }\n"],"names":["OrthographicCamera","PlaneGeometry","Mesh"],"mappings":";;;;;;;;;AAEA,MAAM,KAAK;AAAA,EAAX;AAES;AAAA,mCAAU;AAGV;AAAA,qCAAY;AAGZ;AAAA,iCAAQ;AAGR;AAAA,0CAAiB;AAAA;AAAA,EAEjB,QAAQ,OAAe,QAAsB;AAAA,EAAC;AAAA,EAE9C,OACL,UACA,aACA,YACA,WACA,YACM;AACN,YAAQ,MAAM,4DAA4D;AAAA,EAC5E;AAAA,EAEO,UAAU;AAAA,EAAC;AACpB;AAGA,MAAM,eAAsD;AAAA,EAK1D,YAAY,UAAqB;AAJ1B,kCAAS,IAAIA,yBAAmB,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC;AAClD,oCAAW,IAAIC,MAAAA,cAAc,GAAG,CAAC;AAChC;AAGN,SAAK,OAAO,IAAIC,MAAAA,KAAK,KAAK,UAAU,QAAQ;AAAA,EAC9C;AAAA,EAEA,IAAW,WAAsB;AAC/B,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAW,SAAS,OAAkB;AACpC,SAAK,KAAK,WAAW;AAAA,EACvB;AAAA,EAEO,UAAgB;AAChB,SAAA,KAAK,SAAS;EACrB;AAAA,EAEO,OAAO,UAA0B;AACtC,aAAS,OAAO,KAAK,MAAM,KAAK,MAAM;AAAA,EACxC;AACF;;;"}
@@ -6,6 +6,7 @@ declare class Pass {
6
6
  renderToScreen: boolean;
7
7
  setSize(width: number, height: number): void;
8
8
  render(renderer: WebGLRenderer, writeBuffer: WebGLRenderTarget, readBuffer: WebGLRenderTarget, deltaTime: number, maskActive?: unknown): void;
9
+ dispose(): void;
9
10
  }
10
11
  declare class FullScreenQuad<TMaterial extends Material = Material> {
11
12
  camera: OrthographicCamera;
@@ -21,6 +21,8 @@ class Pass {
21
21
  render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) {
22
22
  console.error("THREE.Pass: .render() must be implemented in derived pass.");
23
23
  }
24
+ dispose() {
25
+ }
24
26
  }
25
27
  class FullScreenQuad {
26
28
  constructor(material) {
@@ -1 +1 @@
1
- {"version":3,"file":"Pass.js","sources":["../../src/postprocessing/Pass.ts"],"sourcesContent":["import { OrthographicCamera, PlaneGeometry, Mesh, Material, Renderer, WebGLRenderer, WebGLRenderTarget } from 'three'\n\nclass Pass {\n // if set to true, the pass is processed by the composer\n public enabled = true\n\n // if set to true, the pass indicates to swap read and write buffer after rendering\n public needsSwap = true\n\n // if set to true, the pass clears its buffer before rendering\n public clear = false\n\n // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n public renderToScreen = false\n\n public setSize(width: number, height: number): void {}\n\n public render(\n renderer: WebGLRenderer,\n writeBuffer: WebGLRenderTarget,\n readBuffer: WebGLRenderTarget,\n deltaTime: number,\n maskActive?: unknown,\n ): void {\n console.error('THREE.Pass: .render() must be implemented in derived pass.')\n }\n}\n\n// Helper for passes that need to fill the viewport with a single quad.\nclass FullScreenQuad<TMaterial extends Material = Material> {\n public camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1)\n public geometry = new PlaneGeometry(2, 2)\n private mesh: Mesh<PlaneGeometry, TMaterial>\n\n constructor(material: TMaterial) {\n this.mesh = new Mesh(this.geometry, material)\n }\n\n public get material(): TMaterial {\n return this.mesh.material\n }\n\n public set material(value: TMaterial) {\n this.mesh.material = value\n }\n\n public dispose(): void {\n this.mesh.geometry.dispose()\n }\n\n public render(renderer: Renderer): void {\n renderer.render(this.mesh, this.camera)\n }\n}\n\nexport { Pass, FullScreenQuad }\n"],"names":[],"mappings":";;;;;;;AAEA,MAAM,KAAK;AAAA,EAAX;AAES;AAAA,mCAAU;AAGV;AAAA,qCAAY;AAGZ;AAAA,iCAAQ;AAGR;AAAA,0CAAiB;AAAA;AAAA,EAEjB,QAAQ,OAAe,QAAsB;AAAA,EAAC;AAAA,EAE9C,OACL,UACA,aACA,YACA,WACA,YACM;AACN,YAAQ,MAAM,4DAA4D;AAAA,EAC5E;AACF;AAGA,MAAM,eAAsD;AAAA,EAK1D,YAAY,UAAqB;AAJ1B,kCAAS,IAAI,mBAAmB,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC;AAClD,oCAAW,IAAI,cAAc,GAAG,CAAC;AAChC;AAGN,SAAK,OAAO,IAAI,KAAK,KAAK,UAAU,QAAQ;AAAA,EAC9C;AAAA,EAEA,IAAW,WAAsB;AAC/B,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAW,SAAS,OAAkB;AACpC,SAAK,KAAK,WAAW;AAAA,EACvB;AAAA,EAEO,UAAgB;AAChB,SAAA,KAAK,SAAS;EACrB;AAAA,EAEO,OAAO,UAA0B;AACtC,aAAS,OAAO,KAAK,MAAM,KAAK,MAAM;AAAA,EACxC;AACF;"}
1
+ {"version":3,"file":"Pass.js","sources":["../../src/postprocessing/Pass.ts"],"sourcesContent":["import { OrthographicCamera, PlaneGeometry, Mesh, Material, Renderer, WebGLRenderer, WebGLRenderTarget } from 'three'\n\nclass Pass {\n // if set to true, the pass is processed by the composer\n public enabled = true\n\n // if set to true, the pass indicates to swap read and write buffer after rendering\n public needsSwap = true\n\n // if set to true, the pass clears its buffer before rendering\n public clear = false\n\n // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n public renderToScreen = false\n\n public setSize(width: number, height: number): void {}\n\n public render(\n renderer: WebGLRenderer,\n writeBuffer: WebGLRenderTarget,\n readBuffer: WebGLRenderTarget,\n deltaTime: number,\n maskActive?: unknown,\n ): void {\n console.error('THREE.Pass: .render() must be implemented in derived pass.')\n }\n\n public dispose() {}\n}\n\n// Helper for passes that need to fill the viewport with a single quad.\nclass FullScreenQuad<TMaterial extends Material = Material> {\n public camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1)\n public geometry = new PlaneGeometry(2, 2)\n private mesh: Mesh<PlaneGeometry, TMaterial>\n\n constructor(material: TMaterial) {\n this.mesh = new Mesh(this.geometry, material)\n }\n\n public get material(): TMaterial {\n return this.mesh.material\n }\n\n public set material(value: TMaterial) {\n this.mesh.material = value\n }\n\n public dispose(): void {\n this.mesh.geometry.dispose()\n }\n\n public render(renderer: Renderer): void {\n renderer.render(this.mesh, this.camera)\n }\n}\n\nexport { Pass, FullScreenQuad }\n"],"names":[],"mappings":";;;;;;;AAEA,MAAM,KAAK;AAAA,EAAX;AAES;AAAA,mCAAU;AAGV;AAAA,qCAAY;AAGZ;AAAA,iCAAQ;AAGR;AAAA,0CAAiB;AAAA;AAAA,EAEjB,QAAQ,OAAe,QAAsB;AAAA,EAAC;AAAA,EAE9C,OACL,UACA,aACA,YACA,WACA,YACM;AACN,YAAQ,MAAM,4DAA4D;AAAA,EAC5E;AAAA,EAEO,UAAU;AAAA,EAAC;AACpB;AAGA,MAAM,eAAsD;AAAA,EAK1D,YAAY,UAAqB;AAJ1B,kCAAS,IAAI,mBAAmB,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC;AAClD,oCAAW,IAAI,cAAc,GAAG,CAAC;AAChC;AAGN,SAAK,OAAO,IAAI,KAAK,KAAK,UAAU,QAAQ;AAAA,EAC9C;AAAA,EAEA,IAAW,WAAsB;AAC/B,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAW,SAAS,OAAkB;AACpC,SAAK,KAAK,WAAW;AAAA,EACvB;AAAA,EAEO,UAAgB;AAChB,SAAA,KAAK,SAAS;EACrB;AAAA,EAEO,OAAO,UAA0B;AACtC,aAAS,OAAO,KAAK,MAAM,KAAK,MAAM;AAAA,EACxC;AACF;"}
@@ -45,6 +45,10 @@ class ShaderPass extends Pass.Pass {
45
45
  this.fsQuad.render(renderer);
46
46
  }
47
47
  }
48
+ dispose() {
49
+ this.fsQuad.dispose();
50
+ this.material.dispose();
51
+ }
48
52
  }
49
53
  exports.ShaderPass = ShaderPass;
50
54
  //# sourceMappingURL=ShaderPass.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ShaderPass.cjs","sources":["../../src/postprocessing/ShaderPass.ts"],"sourcesContent":["import { ShaderMaterial, UniformsUtils, WebGLRenderer, WebGLRenderTarget } from 'three'\nimport { Pass, FullScreenQuad } from './Pass'\nimport { Defines, IShader, Uniforms } from '../shaders/types'\n\nclass ShaderPass extends Pass {\n public textureID: string\n public uniforms: Uniforms\n public material: ShaderMaterial\n public fsQuad: FullScreenQuad\n\n constructor(shader: ShaderMaterial | IShader<Uniforms, Defines | undefined>, textureID = 'tDiffuse') {\n super()\n\n this.textureID = textureID\n\n if (shader instanceof ShaderMaterial) {\n this.uniforms = shader.uniforms\n\n this.material = shader\n } else {\n this.uniforms = UniformsUtils.clone(shader.uniforms)\n\n this.material = new ShaderMaterial({\n defines: Object.assign({}, shader.defines),\n uniforms: this.uniforms,\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader,\n })\n }\n\n this.fsQuad = new FullScreenQuad(this.material)\n }\n\n public render(\n renderer: WebGLRenderer,\n writeBuffer: WebGLRenderTarget,\n readBuffer: WebGLRenderTarget /*, deltaTime, maskActive */,\n ): void {\n if (this.uniforms[this.textureID]) {\n this.uniforms[this.textureID].value = readBuffer.texture\n }\n\n this.fsQuad.material = this.material\n\n if (this.renderToScreen) {\n renderer.setRenderTarget(null)\n this.fsQuad.render(renderer)\n } else {\n renderer.setRenderTarget(writeBuffer)\n // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n if (this.clear) renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil)\n this.fsQuad.render(renderer)\n }\n }\n}\n\nexport { ShaderPass }\n"],"names":["Pass","ShaderMaterial","UniformsUtils","FullScreenQuad"],"mappings":";;;;;;;;;;AAIA,MAAM,mBAAmBA,KAAAA,KAAK;AAAA,EAM5B,YAAY,QAAiE,YAAY,YAAY;AAC7F;AAND;AACA;AACA;AACA;AAKL,SAAK,YAAY;AAEjB,QAAI,kBAAkBC,MAAAA,gBAAgB;AACpC,WAAK,WAAW,OAAO;AAEvB,WAAK,WAAW;AAAA,IAAA,OACX;AACL,WAAK,WAAWC,MAAA,cAAc,MAAM,OAAO,QAAQ;AAE9C,WAAA,WAAW,IAAID,qBAAe;AAAA,QACjC,SAAS,OAAO,OAAO,CAAA,GAAI,OAAO,OAAO;AAAA,QACzC,UAAU,KAAK;AAAA,QACf,cAAc,OAAO;AAAA,QACrB,gBAAgB,OAAO;AAAA,MAAA,CACxB;AAAA,IACH;AAEA,SAAK,SAAS,IAAIE,KAAe,eAAA,KAAK,QAAQ;AAAA,EAChD;AAAA,EAEO,OACL,UACA,aACA,YACM;AACN,QAAI,KAAK,SAAS,KAAK,SAAS,GAAG;AACjC,WAAK,SAAS,KAAK,SAAS,EAAE,QAAQ,WAAW;AAAA,IACnD;AAEK,SAAA,OAAO,WAAW,KAAK;AAE5B,QAAI,KAAK,gBAAgB;AACvB,eAAS,gBAAgB,IAAI;AACxB,WAAA,OAAO,OAAO,QAAQ;AAAA,IAAA,OACtB;AACL,eAAS,gBAAgB,WAAW;AAEpC,UAAI,KAAK;AAAO,iBAAS,MAAM,SAAS,gBAAgB,SAAS,gBAAgB,SAAS,gBAAgB;AACrG,WAAA,OAAO,OAAO,QAAQ;AAAA,IAC7B;AAAA,EACF;AACF;;"}
1
+ {"version":3,"file":"ShaderPass.cjs","sources":["../../src/postprocessing/ShaderPass.ts"],"sourcesContent":["import { ShaderMaterial, UniformsUtils, WebGLRenderer, WebGLRenderTarget } from 'three'\nimport { Pass, FullScreenQuad } from './Pass'\nimport { Defines, IShader, Uniforms } from '../shaders/types'\n\nclass ShaderPass extends Pass {\n public textureID: string\n public uniforms: Uniforms\n public material: ShaderMaterial\n public fsQuad: FullScreenQuad\n\n constructor(shader: ShaderMaterial | IShader<Uniforms, Defines | undefined>, textureID = 'tDiffuse') {\n super()\n\n this.textureID = textureID\n\n if (shader instanceof ShaderMaterial) {\n this.uniforms = shader.uniforms\n\n this.material = shader\n } else {\n this.uniforms = UniformsUtils.clone(shader.uniforms)\n\n this.material = new ShaderMaterial({\n defines: Object.assign({}, shader.defines),\n uniforms: this.uniforms,\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader,\n })\n }\n\n this.fsQuad = new FullScreenQuad(this.material)\n }\n\n public render(\n renderer: WebGLRenderer,\n writeBuffer: WebGLRenderTarget,\n readBuffer: WebGLRenderTarget /*, deltaTime, maskActive */,\n ): void {\n if (this.uniforms[this.textureID]) {\n this.uniforms[this.textureID].value = readBuffer.texture\n }\n\n this.fsQuad.material = this.material\n\n if (this.renderToScreen) {\n renderer.setRenderTarget(null)\n this.fsQuad.render(renderer)\n } else {\n renderer.setRenderTarget(writeBuffer)\n // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n if (this.clear) renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil)\n this.fsQuad.render(renderer)\n }\n }\n\n public dispose() {\n this.fsQuad.dispose()\n this.material.dispose()\n }\n}\n\nexport { ShaderPass }\n"],"names":["Pass","ShaderMaterial","UniformsUtils","FullScreenQuad"],"mappings":";;;;;;;;;;AAIA,MAAM,mBAAmBA,KAAAA,KAAK;AAAA,EAM5B,YAAY,QAAiE,YAAY,YAAY;AAC7F;AAND;AACA;AACA;AACA;AAKL,SAAK,YAAY;AAEjB,QAAI,kBAAkBC,MAAAA,gBAAgB;AACpC,WAAK,WAAW,OAAO;AAEvB,WAAK,WAAW;AAAA,IAAA,OACX;AACL,WAAK,WAAWC,MAAA,cAAc,MAAM,OAAO,QAAQ;AAE9C,WAAA,WAAW,IAAID,qBAAe;AAAA,QACjC,SAAS,OAAO,OAAO,CAAA,GAAI,OAAO,OAAO;AAAA,QACzC,UAAU,KAAK;AAAA,QACf,cAAc,OAAO;AAAA,QACrB,gBAAgB,OAAO;AAAA,MAAA,CACxB;AAAA,IACH;AAEA,SAAK,SAAS,IAAIE,KAAe,eAAA,KAAK,QAAQ;AAAA,EAChD;AAAA,EAEO,OACL,UACA,aACA,YACM;AACN,QAAI,KAAK,SAAS,KAAK,SAAS,GAAG;AACjC,WAAK,SAAS,KAAK,SAAS,EAAE,QAAQ,WAAW;AAAA,IACnD;AAEK,SAAA,OAAO,WAAW,KAAK;AAE5B,QAAI,KAAK,gBAAgB;AACvB,eAAS,gBAAgB,IAAI;AACxB,WAAA,OAAO,OAAO,QAAQ;AAAA,IAAA,OACtB;AACL,eAAS,gBAAgB,WAAW;AAEpC,UAAI,KAAK;AAAO,iBAAS,MAAM,SAAS,gBAAgB,SAAS,gBAAgB,SAAS,gBAAgB;AACrG,WAAA,OAAO,OAAO,QAAQ;AAAA,IAC7B;AAAA,EACF;AAAA,EAEO,UAAU;AACf,SAAK,OAAO;AACZ,SAAK,SAAS;EAChB;AACF;;"}
@@ -8,5 +8,6 @@ declare class ShaderPass extends Pass {
8
8
  fsQuad: FullScreenQuad;
9
9
  constructor(shader: ShaderMaterial | IShader<Uniforms, Defines | undefined>, textureID?: string);
10
10
  render(renderer: WebGLRenderer, writeBuffer: WebGLRenderTarget, readBuffer: WebGLRenderTarget): void;
11
+ dispose(): void;
11
12
  }
12
13
  export { ShaderPass };
@@ -43,6 +43,10 @@ class ShaderPass extends Pass {
43
43
  this.fsQuad.render(renderer);
44
44
  }
45
45
  }
46
+ dispose() {
47
+ this.fsQuad.dispose();
48
+ this.material.dispose();
49
+ }
46
50
  }
47
51
  export {
48
52
  ShaderPass
@@ -1 +1 @@
1
- {"version":3,"file":"ShaderPass.js","sources":["../../src/postprocessing/ShaderPass.ts"],"sourcesContent":["import { ShaderMaterial, UniformsUtils, WebGLRenderer, WebGLRenderTarget } from 'three'\nimport { Pass, FullScreenQuad } from './Pass'\nimport { Defines, IShader, Uniforms } from '../shaders/types'\n\nclass ShaderPass extends Pass {\n public textureID: string\n public uniforms: Uniforms\n public material: ShaderMaterial\n public fsQuad: FullScreenQuad\n\n constructor(shader: ShaderMaterial | IShader<Uniforms, Defines | undefined>, textureID = 'tDiffuse') {\n super()\n\n this.textureID = textureID\n\n if (shader instanceof ShaderMaterial) {\n this.uniforms = shader.uniforms\n\n this.material = shader\n } else {\n this.uniforms = UniformsUtils.clone(shader.uniforms)\n\n this.material = new ShaderMaterial({\n defines: Object.assign({}, shader.defines),\n uniforms: this.uniforms,\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader,\n })\n }\n\n this.fsQuad = new FullScreenQuad(this.material)\n }\n\n public render(\n renderer: WebGLRenderer,\n writeBuffer: WebGLRenderTarget,\n readBuffer: WebGLRenderTarget /*, deltaTime, maskActive */,\n ): void {\n if (this.uniforms[this.textureID]) {\n this.uniforms[this.textureID].value = readBuffer.texture\n }\n\n this.fsQuad.material = this.material\n\n if (this.renderToScreen) {\n renderer.setRenderTarget(null)\n this.fsQuad.render(renderer)\n } else {\n renderer.setRenderTarget(writeBuffer)\n // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n if (this.clear) renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil)\n this.fsQuad.render(renderer)\n }\n }\n}\n\nexport { ShaderPass }\n"],"names":[],"mappings":";;;;;;;;AAIA,MAAM,mBAAmB,KAAK;AAAA,EAM5B,YAAY,QAAiE,YAAY,YAAY;AAC7F;AAND;AACA;AACA;AACA;AAKL,SAAK,YAAY;AAEjB,QAAI,kBAAkB,gBAAgB;AACpC,WAAK,WAAW,OAAO;AAEvB,WAAK,WAAW;AAAA,IAAA,OACX;AACL,WAAK,WAAW,cAAc,MAAM,OAAO,QAAQ;AAE9C,WAAA,WAAW,IAAI,eAAe;AAAA,QACjC,SAAS,OAAO,OAAO,CAAA,GAAI,OAAO,OAAO;AAAA,QACzC,UAAU,KAAK;AAAA,QACf,cAAc,OAAO;AAAA,QACrB,gBAAgB,OAAO;AAAA,MAAA,CACxB;AAAA,IACH;AAEA,SAAK,SAAS,IAAI,eAAe,KAAK,QAAQ;AAAA,EAChD;AAAA,EAEO,OACL,UACA,aACA,YACM;AACN,QAAI,KAAK,SAAS,KAAK,SAAS,GAAG;AACjC,WAAK,SAAS,KAAK,SAAS,EAAE,QAAQ,WAAW;AAAA,IACnD;AAEK,SAAA,OAAO,WAAW,KAAK;AAE5B,QAAI,KAAK,gBAAgB;AACvB,eAAS,gBAAgB,IAAI;AACxB,WAAA,OAAO,OAAO,QAAQ;AAAA,IAAA,OACtB;AACL,eAAS,gBAAgB,WAAW;AAEpC,UAAI,KAAK;AAAO,iBAAS,MAAM,SAAS,gBAAgB,SAAS,gBAAgB,SAAS,gBAAgB;AACrG,WAAA,OAAO,OAAO,QAAQ;AAAA,IAC7B;AAAA,EACF;AACF;"}
1
+ {"version":3,"file":"ShaderPass.js","sources":["../../src/postprocessing/ShaderPass.ts"],"sourcesContent":["import { ShaderMaterial, UniformsUtils, WebGLRenderer, WebGLRenderTarget } from 'three'\nimport { Pass, FullScreenQuad } from './Pass'\nimport { Defines, IShader, Uniforms } from '../shaders/types'\n\nclass ShaderPass extends Pass {\n public textureID: string\n public uniforms: Uniforms\n public material: ShaderMaterial\n public fsQuad: FullScreenQuad\n\n constructor(shader: ShaderMaterial | IShader<Uniforms, Defines | undefined>, textureID = 'tDiffuse') {\n super()\n\n this.textureID = textureID\n\n if (shader instanceof ShaderMaterial) {\n this.uniforms = shader.uniforms\n\n this.material = shader\n } else {\n this.uniforms = UniformsUtils.clone(shader.uniforms)\n\n this.material = new ShaderMaterial({\n defines: Object.assign({}, shader.defines),\n uniforms: this.uniforms,\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader,\n })\n }\n\n this.fsQuad = new FullScreenQuad(this.material)\n }\n\n public render(\n renderer: WebGLRenderer,\n writeBuffer: WebGLRenderTarget,\n readBuffer: WebGLRenderTarget /*, deltaTime, maskActive */,\n ): void {\n if (this.uniforms[this.textureID]) {\n this.uniforms[this.textureID].value = readBuffer.texture\n }\n\n this.fsQuad.material = this.material\n\n if (this.renderToScreen) {\n renderer.setRenderTarget(null)\n this.fsQuad.render(renderer)\n } else {\n renderer.setRenderTarget(writeBuffer)\n // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n if (this.clear) renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil)\n this.fsQuad.render(renderer)\n }\n }\n\n public dispose() {\n this.fsQuad.dispose()\n this.material.dispose()\n }\n}\n\nexport { ShaderPass }\n"],"names":[],"mappings":";;;;;;;;AAIA,MAAM,mBAAmB,KAAK;AAAA,EAM5B,YAAY,QAAiE,YAAY,YAAY;AAC7F;AAND;AACA;AACA;AACA;AAKL,SAAK,YAAY;AAEjB,QAAI,kBAAkB,gBAAgB;AACpC,WAAK,WAAW,OAAO;AAEvB,WAAK,WAAW;AAAA,IAAA,OACX;AACL,WAAK,WAAW,cAAc,MAAM,OAAO,QAAQ;AAE9C,WAAA,WAAW,IAAI,eAAe;AAAA,QACjC,SAAS,OAAO,OAAO,CAAA,GAAI,OAAO,OAAO;AAAA,QACzC,UAAU,KAAK;AAAA,QACf,cAAc,OAAO;AAAA,QACrB,gBAAgB,OAAO;AAAA,MAAA,CACxB;AAAA,IACH;AAEA,SAAK,SAAS,IAAI,eAAe,KAAK,QAAQ;AAAA,EAChD;AAAA,EAEO,OACL,UACA,aACA,YACM;AACN,QAAI,KAAK,SAAS,KAAK,SAAS,GAAG;AACjC,WAAK,SAAS,KAAK,SAAS,EAAE,QAAQ,WAAW;AAAA,IACnD;AAEK,SAAA,OAAO,WAAW,KAAK;AAE5B,QAAI,KAAK,gBAAgB;AACvB,eAAS,gBAAgB,IAAI;AACxB,WAAA,OAAO,OAAO,QAAQ;AAAA,IAAA,OACtB;AACL,eAAS,gBAAgB,WAAW;AAEpC,UAAI,KAAK;AAAO,iBAAS,MAAM,SAAS,gBAAgB,SAAS,gBAAgB,SAAS,gBAAgB;AACrG,WAAA,OAAO,OAAO,QAAQ;AAAA,IAC7B;AAAA,EACF;AAAA,EAEO,UAAU;AACf,SAAK,OAAO;AACZ,SAAK,SAAS;EAChB;AACF;"}