Spaces:
Running
Running
/** | |
* @author sunag / http://www.sunag.com.br/ | |
*/ | |
import { NodeMaterial } from '../materials/NodeMaterial.js'; | |
import { ScreenNode } from '../inputs/ScreenNode.js'; | |
function NodePostProcessing( renderer, renderTarget ) { | |
if ( renderTarget === undefined ) { | |
var parameters = { | |
minFilter: THREE.LinearFilter, | |
magFilter: THREE.LinearFilter, | |
format: THREE.RGBAFormat, | |
stencilBuffer: false | |
}; | |
var size = renderer.getDrawingBufferSize( new THREE.Vector2() ); | |
renderTarget = new THREE.WebGLRenderTarget( size.width, size.height, parameters ); | |
} | |
this.renderer = renderer; | |
this.renderTarget = renderTarget; | |
this.output = new ScreenNode(); | |
this.material = new NodeMaterial(); | |
this.camera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 ); | |
this.scene = new THREE.Scene(); | |
this.quad = new THREE.Mesh( new THREE.PlaneBufferGeometry( 2, 2 ), this.material ); | |
this.quad.frustumCulled = false; // Avoid getting clipped | |
this.scene.add( this.quad ); | |
this.needsUpdate = true; | |
} | |
NodePostProcessing.prototype = { | |
constructor: NodePostProcessing, | |
render: function ( scene, camera, frame ) { | |
if ( this.needsUpdate ) { | |
this.material.dispose(); | |
this.material.fragment.value = this.output; | |
this.material.build(); | |
if ( this.material.uniforms.renderTexture ) { | |
this.material.uniforms.renderTexture.value = this.renderTarget.texture; | |
} | |
this.needsUpdate = false; | |
} | |
frame.setRenderer( this.renderer ) | |
.setRenderTexture( this.renderTarget.texture ); | |
this.renderer.setRenderTarget( this.renderTarget ); | |
this.renderer.render( scene, camera ); | |
frame.updateNode( this.material ); | |
this.renderer.setRenderTarget( null ); | |
this.renderer.render( this.scene, this.camera ); | |
}, | |
setSize: function ( width, height ) { | |
this.renderTarget.setSize( width, height ); | |
this.renderer.setSize( width, height ); | |
}, | |
copy: function ( source ) { | |
this.output = source.output; | |
}, | |
toJSON: function ( meta ) { | |
var isRootObject = ( meta === undefined || typeof meta === 'string' ); | |
if ( isRootObject ) { | |
meta = { | |
nodes: {} | |
}; | |
} | |
if ( meta && ! meta.post ) meta.post = {}; | |
if ( ! meta.post[ this.uuid ] ) { | |
var data = {}; | |
data.uuid = this.uuid; | |
data.type = "NodePostProcessing"; | |
meta.post[ this.uuid ] = data; | |
if ( this.name !== "" ) data.name = this.name; | |
if ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData; | |
data.output = this.output.toJSON( meta ).uuid; | |
} | |
meta.post = this.uuid; | |
return meta; | |
} | |
}; | |
export { NodePostProcessing }; | |