12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import TextureNode from '../accessors/TextureNode.js';
- import { NodeUpdateType } from '../core/constants.js';
- import { addNodeClass } from '../core/Node.js';
- import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
- import { viewportTopLeft } from './ViewportNode.js';
- import { Vector2, FramebufferTexture } from 'three';
- const _size = new Vector2();
- class ViewportTextureNode extends TextureNode {
- constructor( uv = viewportTopLeft, level = null ) {
- super( null, uv, level );
- this.isOutputTextureNode = true;
- this.updateBeforeType = NodeUpdateType.FRAME;
- }
- constructFramebuffer( /*builder*/ ) {
- return new FramebufferTexture();
- }
- construct( builder ) {
- if ( this.value === null ) this.value = this.constructFramebuffer( builder );
- return super.construct( builder );
- }
- updateBefore( frame ) {
- const renderer = frame.renderer;
- renderer.getDrawingBufferSize( _size );
- //
- const framebufferTexture = this.value;
- if ( framebufferTexture.image.width !== _size.width || framebufferTexture.image.height !== _size.height ) {
- framebufferTexture.image.width = _size.width;
- framebufferTexture.image.height = _size.height;
- framebufferTexture.needsUpdate = true;
- }
- //
- renderer.copyFramebufferToTexture( framebufferTexture );
- }
- }
- export default ViewportTextureNode;
- export const viewportTexture = nodeProxy( ViewportTextureNode );
- addNodeElement( 'viewportTexture', viewportTexture );
- addNodeClass( ViewportTextureNode );
|