ViewportTextureNode.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import TextureNode from '../accessors/TextureNode.js';
  2. import { NodeUpdateType } from '../core/constants.js';
  3. import { addNodeClass } from '../core/Node.js';
  4. import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
  5. import { viewportTopLeft } from './ViewportNode.js';
  6. import { Vector2 } from 'three';
  7. let size = new Vector2();
  8. class ViewportTextureNode extends TextureNode {
  9. constructor( uv = viewportTopLeft, level = null ) {
  10. super( null, uv, level );
  11. this.rtt = null;
  12. this.isOutputTextureNode = true;
  13. this.updateBeforeType = NodeUpdateType.FRAME;
  14. }
  15. constructRTT( builder ) {
  16. return builder.getRenderTarget();
  17. }
  18. construct( builder ) {
  19. if ( this.rtt === null ) this.rtt = this.constructRTT( builder );
  20. this.value = this.rtt.texture;
  21. return super.construct( builder );
  22. }
  23. updateBefore( frame ) {
  24. const rtt = this.rtt;
  25. const renderer = frame.renderer;
  26. renderer.getDrawingBufferSize( size );
  27. rtt.setSize( size.width, size.height );
  28. renderer.copyFramebufferToRenderTarget( rtt );
  29. }
  30. }
  31. export default ViewportTextureNode;
  32. export const viewportTexture = nodeProxy( ViewportTextureNode );
  33. addNodeElement( 'viewportTexture', viewportTexture );
  34. addNodeClass( ViewportTextureNode );