123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- import {
- BufferGeometry,
- Float32BufferAttribute,
- OrthographicCamera,
- Mesh
- } from 'three';
- /**
- * Abstract base class for all post processing passes.
- *
- * This module is only relevant for post processing with {@link WebGLRenderer}.
- *
- * @abstract
- * @three_import import { Pass } from 'three/addons/postprocessing/Pass.js';
- */
- class Pass {
- /**
- * Constructs a new pass.
- */
- constructor() {
- /**
- * This flag can be used for type testing.
- *
- * @type {boolean}
- * @readonly
- * @default true
- */
- this.isPass = true;
- /**
- * If set to `true`, the pass is processed by the composer.
- *
- * @type {boolean}
- * @default true
- */
- this.enabled = true;
- /**
- * If set to `true`, the pass indicates to swap read and write buffer after rendering.
- *
- * @type {boolean}
- * @default true
- */
- this.needsSwap = true;
- /**
- * If set to `true`, the pass clears its buffer before rendering
- *
- * @type {boolean}
- * @default false
- */
- this.clear = false;
- /**
- * If set to `true`, the result of the pass is rendered to screen. The last pass in the composers
- * pass chain gets automatically rendered to screen, no matter how this property is configured.
- *
- * @type {boolean}
- * @default false
- */
- this.renderToScreen = false;
- }
- /**
- * Sets the size of the pass.
- *
- * @abstract
- * @param {number} width - The width to set.
- * @param {number} height - The width to set.
- */
- setSize( /* width, height */ ) {}
- /**
- * This method holds the render logic of a pass. It must be implemented in all derived classes.
- *
- * @abstract
- * @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( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {
- console.error( 'THREE.Pass: .render() must be implemented in derived pass.' );
- }
- /**
- * Frees the GPU-related resources allocated by this instance. Call this
- * method whenever the pass is no longer used in your app.
- *
- * @abstract
- */
- dispose() {}
- }
- // Helper for passes that need to fill the viewport with a single quad.
- const _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
- // https://github.com/mrdoob/three.js/pull/21358
- class FullscreenTriangleGeometry extends BufferGeometry {
- constructor() {
- super();
- this.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );
- this.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );
- }
- }
- const _geometry = new FullscreenTriangleGeometry();
- /**
- * This module is a helper for passes which need to render a full
- * screen effect which is quite common in context of post processing.
- *
- * The intended usage is to reuse a single full screen quad for rendering
- * subsequent passes by just reassigning the `material` reference.
- *
- * This module can only be used with {@link WebGLRenderer}.
- *
- * @augments Mesh
- * @three_import import { FullScreenQuad } from 'three/addons/postprocessing/Pass.js';
- */
- class FullScreenQuad {
- /**
- * Constructs a new full screen quad.
- *
- * @param {?Material} material - The material to render te full screen quad with.
- */
- constructor( material ) {
- this._mesh = new Mesh( _geometry, material );
- }
- /**
- * Frees the GPU-related resources allocated by this instance. Call this
- * method whenever the instance is no longer used in your app.
- */
- dispose() {
- this._mesh.geometry.dispose();
- }
- /**
- * Renders the full screen quad.
- *
- * @param {WebGLRenderer} renderer - The renderer.
- */
- render( renderer ) {
- renderer.render( this._mesh, _camera );
- }
- /**
- * The quad's material.
- *
- * @type {?Material}
- */
- get material() {
- return this._mesh.material;
- }
- set material( value ) {
- this._mesh.material = value;
- }
- }
- export { Pass, FullScreenQuad };
|