| 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 };
 |