Path: blob/main/projects/HexGL/libs/postprocessing/EffectComposer.js
4627 views
/**1* @author alteredq / http://alteredqualia.com/2*/34THREE.EffectComposer = function ( renderer, renderTarget ) {56this.renderer = renderer;78this.renderTarget1 = renderTarget;910if ( this.renderTarget1 === undefined ) {1112var width = window.innerWidth || 1;13var height = window.innerHeight || 1;1415this.renderTargetParameters = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBFormat, stencilBuffer: false };16this.renderTarget1 = new THREE.WebGLRenderTarget( width, height, this.renderTargetParameters );1718}1920this.renderTarget2 = this.renderTarget1.clone();2122this.writeBuffer = this.renderTarget1;23this.readBuffer = this.renderTarget2;2425this.passes = [];2627this.copyPass = new THREE.ShaderPass( THREE.ShaderExtras[ "screen" ] );2829};3031THREE.EffectComposer.prototype = {3233swapBuffers: function() {3435var tmp = this.readBuffer;36this.readBuffer = this.writeBuffer;37this.writeBuffer = tmp;3839},4041addPass: function ( pass ) {4243this.passes.push( pass );4445},4647render: function ( delta ) {4849this.writeBuffer = this.renderTarget1;50this.readBuffer = this.renderTarget2;5152var maskActive = false;5354var pass, i, il = this.passes.length;5556for ( i = 0; i < il; i ++ ) {5758pass = this.passes[ i ];5960if ( !pass.enabled ) continue;6162pass.render( this.renderer, this.writeBuffer, this.readBuffer, delta, maskActive );6364if ( pass.needsSwap ) {6566if ( maskActive ) {6768var context = this.renderer.context;6970context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );7172this.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, delta );7374context.stencilFunc( context.EQUAL, 1, 0xffffffff );7576}7778this.swapBuffers();7980}8182if ( pass instanceof THREE.MaskPass ) {8384maskActive = true;8586} else if ( pass instanceof THREE.ClearMaskPass ) {8788maskActive = false;8990}9192}9394},9596reset: function ( renderTarget ) {9798this.renderTarget1 = renderTarget;99100if ( this.renderTarget1 === undefined ) {101102this.renderTarget1 = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, this.renderTargetParameters );103104}105106this.renderTarget2 = this.renderTarget1.clone();107108this.writeBuffer = this.renderTarget1;109this.readBuffer = this.renderTarget2;110111THREE.EffectComposer.quad.scale.set( window.innerWidth, window.innerHeight, 1 );112113THREE.EffectComposer.camera.left = window.innerWidth / - 2;114THREE.EffectComposer.camera.right = window.innerWidth / 2;115THREE.EffectComposer.camera.top = window.innerHeight / 2;116THREE.EffectComposer.camera.bottom = window.innerHeight / - 2;117118THREE.EffectComposer.camera.updateProjectionMatrix();119120}121122};123124// shared ortho camera125126THREE.EffectComposer.initWidth = window.innerWidth || 1;127THREE.EffectComposer.initHeight = window.innerHeight || 1;128129THREE.EffectComposer.camera = new THREE.OrthographicCamera( THREE.EffectComposer.initWidth / - 2, THREE.EffectComposer.initWidth / 2, THREE.EffectComposer.initHeight / 2, THREE.EffectComposer.initHeight / - 2, -10000, 10000 );130131// shared fullscreen quad scene132133THREE.EffectComposer.geometry = new THREE.PlaneGeometry( 1, 1 );134THREE.EffectComposer.geometry.applyMatrix( new THREE.Matrix4().makeRotationX( Math.PI / 2 ) );135136THREE.EffectComposer.quad = new THREE.Mesh( THREE.EffectComposer.geometry, null );137THREE.EffectComposer.quad.position.z = -100;138THREE.EffectComposer.quad.scale.set( THREE.EffectComposer.initWidth, THREE.EffectComposer.initHeight, 1 );139140THREE.EffectComposer.scene = new THREE.Scene();141THREE.EffectComposer.scene.add( THREE.EffectComposer.quad );142THREE.EffectComposer.scene.add( THREE.EffectComposer.camera );143144145