96 lines
1.7 KiB
JavaScript
96 lines
1.7 KiB
JavaScript
|
import {
|
||
|
BufferGeometry,
|
||
|
Float32BufferAttribute,
|
||
|
OrthographicCamera,
|
||
|
Mesh
|
||
|
} from 'three';
|
||
|
|
||
|
class Pass {
|
||
|
|
||
|
constructor() {
|
||
|
|
||
|
this.isPass = true;
|
||
|
|
||
|
// if set to true, the pass is processed by the composer
|
||
|
this.enabled = true;
|
||
|
|
||
|
// if set to true, the pass indicates to swap read and write buffer after rendering
|
||
|
this.needsSwap = true;
|
||
|
|
||
|
// if set to true, the pass clears its buffer before rendering
|
||
|
this.clear = false;
|
||
|
|
||
|
// if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.
|
||
|
this.renderToScreen = false;
|
||
|
|
||
|
}
|
||
|
|
||
|
setSize( /* width, height */ ) {}
|
||
|
|
||
|
render( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {
|
||
|
|
||
|
console.error( 'THREE.Pass: .render() must be implemented in derived pass.' );
|
||
|
|
||
|
}
|
||
|
|
||
|
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();
|
||
|
|
||
|
class FullScreenQuad {
|
||
|
|
||
|
constructor( material ) {
|
||
|
|
||
|
this._mesh = new Mesh( _geometry, material );
|
||
|
|
||
|
}
|
||
|
|
||
|
dispose() {
|
||
|
|
||
|
this._mesh.geometry.dispose();
|
||
|
|
||
|
}
|
||
|
|
||
|
render( renderer ) {
|
||
|
|
||
|
renderer.render( this._mesh, _camera );
|
||
|
|
||
|
}
|
||
|
|
||
|
get material() {
|
||
|
|
||
|
return this._mesh.material;
|
||
|
|
||
|
}
|
||
|
|
||
|
set material( value ) {
|
||
|
|
||
|
this._mesh.material = value;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
export { Pass, FullScreenQuad };
|