mirror of
https://github.com/DanielnetoDotCom/YouPHPTube
synced 2025-10-05 02:39:46 +02:00
This commit is contained in:
parent
f0f62670c5
commit
7e26256cac
4563 changed files with 1246712 additions and 17558 deletions
154
node_modules/three/examples/jsm/nodes/inputs/RTTNode.js
generated
vendored
Normal file
154
node_modules/three/examples/jsm/nodes/inputs/RTTNode.js
generated
vendored
Normal file
|
@ -0,0 +1,154 @@
|
|||
import {
|
||||
Mesh,
|
||||
OrthographicCamera,
|
||||
PlaneGeometry,
|
||||
Scene,
|
||||
WebGLRenderTarget
|
||||
} from '../../../../build/three.module.js';
|
||||
|
||||
import { NodeBuilder } from '../core/NodeBuilder.js';
|
||||
import { NodeMaterial } from '../materials/NodeMaterial.js';
|
||||
import { TextureNode } from './TextureNode.js';
|
||||
|
||||
function RTTNode( width, height, input, options ) {
|
||||
|
||||
options = options || {};
|
||||
|
||||
this.input = input;
|
||||
|
||||
this.clear = options.clear !== undefined ? options.clear : true;
|
||||
|
||||
this.renderTarget = new WebGLRenderTarget( width, height, options );
|
||||
|
||||
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.render = true;
|
||||
|
||||
TextureNode.call( this, this.renderTarget.texture );
|
||||
|
||||
}
|
||||
|
||||
RTTNode.prototype = Object.create( TextureNode.prototype );
|
||||
RTTNode.prototype.constructor = RTTNode;
|
||||
RTTNode.prototype.nodeType = 'RTT';
|
||||
|
||||
RTTNode.prototype.build = function ( builder, output, uuid ) {
|
||||
|
||||
var rttBuilder = new NodeBuilder();
|
||||
rttBuilder.nodes = builder.nodes;
|
||||
rttBuilder.updaters = builder.updaters;
|
||||
|
||||
this.material.fragment.value = this.input;
|
||||
this.material.build( { builder: rttBuilder } );
|
||||
|
||||
return TextureNode.prototype.build.call( this, builder, output, uuid );
|
||||
|
||||
};
|
||||
|
||||
RTTNode.prototype.updateFramesaveTo = function ( frame ) {
|
||||
|
||||
this.saveTo.render = false;
|
||||
|
||||
if ( this.saveTo !== this.saveToCurrent ) {
|
||||
|
||||
if ( this.saveToMaterial ) this.saveToMaterial.dispose();
|
||||
|
||||
var material = new NodeMaterial();
|
||||
material.fragment.value = this;
|
||||
material.build();
|
||||
|
||||
var scene = new Scene();
|
||||
|
||||
var quad = new Mesh( new PlaneGeometry( 2, 2 ), material );
|
||||
quad.frustumCulled = false; // Avoid getting clipped
|
||||
scene.add( quad );
|
||||
|
||||
this.saveToScene = scene;
|
||||
this.saveToMaterial = material;
|
||||
|
||||
}
|
||||
|
||||
this.saveToCurrent = this.saveTo;
|
||||
|
||||
frame.renderer.setRenderTarget( this.saveTo.renderTarget );
|
||||
if ( this.saveTo.clear ) frame.renderer.clear();
|
||||
frame.renderer.render( this.saveToScene, this.camera );
|
||||
|
||||
};
|
||||
|
||||
RTTNode.prototype.updateFrame = function ( frame ) {
|
||||
|
||||
if ( frame.renderer ) {
|
||||
|
||||
// from the second frame
|
||||
|
||||
if ( this.saveTo && this.saveTo.render === false ) {
|
||||
|
||||
this.updateFramesaveTo( frame );
|
||||
|
||||
}
|
||||
|
||||
if ( this.render ) {
|
||||
|
||||
if ( this.material.uniforms.renderTexture ) {
|
||||
|
||||
this.material.uniforms.renderTexture.value = frame.renderTexture;
|
||||
|
||||
}
|
||||
|
||||
frame.renderer.setRenderTarget( this.renderTarget );
|
||||
if ( this.clear ) frame.renderer.clear();
|
||||
frame.renderer.render( this.scene, this.camera );
|
||||
|
||||
}
|
||||
|
||||
// first frame
|
||||
|
||||
if ( this.saveTo && this.saveTo.render === true ) {
|
||||
|
||||
this.updateFramesaveTo( frame );
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
console.warn( 'RTTNode need a renderer in NodeFrame' );
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
RTTNode.prototype.copy = function ( source ) {
|
||||
|
||||
TextureNode.prototype.copy.call( this, source );
|
||||
|
||||
this.saveTo = source.saveTo;
|
||||
|
||||
return this;
|
||||
|
||||
};
|
||||
|
||||
RTTNode.prototype.toJSON = function ( meta ) {
|
||||
|
||||
var data = this.getJSONNode( meta );
|
||||
|
||||
if ( ! data ) {
|
||||
|
||||
data = TextureNode.prototype.toJSON.call( this, meta );
|
||||
|
||||
if ( this.saveTo ) data.saveTo = this.saveTo.toJSON( meta ).uuid;
|
||||
|
||||
}
|
||||
|
||||
return data;
|
||||
|
||||
};
|
||||
|
||||
export { RTTNode };
|
Loading…
Add table
Add a link
Reference in a new issue