| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | 
							- import {
 
- 	LinearFilter,
 
- 	Mesh,
 
- 	OrthographicCamera,
 
- 	PlaneGeometry,
 
- 	RGBAFormat,
 
- 	Scene,
 
- 	Vector2,
 
- 	WebGLRenderTarget
 
- } from '../../../../build/three.module.js';
 
- import { NodeMaterial } from '../materials/NodeMaterial.js';
 
- import { ScreenNode } from '../inputs/ScreenNode.js';
 
- class NodePostProcessing {
 
- 	constructor( renderer, renderTarget ) {
 
- 		if ( renderTarget === undefined ) {
 
- 			const parameters = {
 
- 				minFilter: LinearFilter,
 
- 				magFilter: LinearFilter,
 
- 				format: RGBAFormat
 
- 			};
 
- 			const size = renderer.getDrawingBufferSize( new Vector2() );
 
- 			renderTarget = new WebGLRenderTarget( size.width, size.height, parameters );
 
- 		}
 
- 		this.renderer = renderer;
 
- 		this.renderTarget = renderTarget;
 
- 		this.output = new ScreenNode();
 
- 		this.material = new NodeMaterial();
 
- 		this.camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
 
- 		this.scene = new Scene();
 
- 		this.quad = new Mesh( new PlaneGeometry( 2, 2 ), this.material );
 
- 		this.quad.frustumCulled = false; // Avoid getting clipped
 
- 		this.scene.add( this.quad );
 
- 		this.needsUpdate = true;
 
- 	}
 
- 	render( 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 );
 
- 	}
 
- 	setPixelRatio( value ) {
 
- 		this.renderer.setPixelRatio( value );
 
- 		const size = this.renderer.getSize( new Vector2() );
 
- 		this.setSize( size.width, size.height );
 
- 	}
 
- 	setSize( width, height ) {
 
- 		const pixelRatio = this.renderer.getPixelRatio();
 
- 		this.renderTarget.setSize( width * pixelRatio, height * pixelRatio );
 
- 		this.renderer.setSize( width, height );
 
- 	}
 
- 	copy( source ) {
 
- 		this.output = source.output;
 
- 		return this;
 
- 	}
 
- 	toJSON( meta ) {
 
- 		const isRootObject = ( meta === undefined || typeof meta === 'string' );
 
- 		if ( isRootObject ) {
 
- 			meta = {
 
- 				nodes: {}
 
- 			};
 
- 		}
 
- 		if ( meta && ! meta.post ) meta.post = {};
 
- 		if ( ! meta.post[ this.uuid ] ) {
 
- 			const 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 };
 
 
  |