79 lines
2.1 KiB
JavaScript
79 lines
2.1 KiB
JavaScript
|
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, LinearMipmapLinearFilter } from 'three';
|
||
|
|
||
|
const _size = new Vector2();
|
||
|
|
||
|
class ViewportTextureNode extends TextureNode {
|
||
|
|
||
|
constructor( uvNode = viewportTopLeft, levelNode = null, framebufferTexture = null ) {
|
||
|
|
||
|
if ( framebufferTexture === null ) {
|
||
|
|
||
|
framebufferTexture = new FramebufferTexture();
|
||
|
framebufferTexture.minFilter = LinearMipmapLinearFilter;
|
||
|
|
||
|
}
|
||
|
|
||
|
super( framebufferTexture, uvNode, levelNode );
|
||
|
|
||
|
this.generateMipmaps = false;
|
||
|
|
||
|
this.isOutputTextureNode = true;
|
||
|
|
||
|
this.updateBeforeType = NodeUpdateType.FRAME;
|
||
|
|
||
|
}
|
||
|
|
||
|
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;
|
||
|
|
||
|
}
|
||
|
|
||
|
//
|
||
|
|
||
|
const currentGenerateMipmaps = framebufferTexture.generateMipmaps;
|
||
|
framebufferTexture.generateMipmaps = this.generateMipmaps;
|
||
|
|
||
|
renderer.copyFramebufferToTexture( framebufferTexture );
|
||
|
|
||
|
framebufferTexture.generateMipmaps = currentGenerateMipmaps;
|
||
|
|
||
|
}
|
||
|
|
||
|
clone() {
|
||
|
|
||
|
const viewportTextureNode = new this.constructor( this.uvNode, this.levelNode, this.value );
|
||
|
viewportTextureNode.generateMipmaps = this.generateMipmaps;
|
||
|
|
||
|
return viewportTextureNode;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
export default ViewportTextureNode;
|
||
|
|
||
|
export const viewportTexture = nodeProxy( ViewportTextureNode );
|
||
|
export const viewportMipTexture = nodeProxy( ViewportTextureNode, null, null, { generateMipmaps: true } );
|
||
|
|
||
|
addNodeElement( 'viewportTexture', viewportTexture );
|
||
|
addNodeElement( 'viewportMipTexture', viewportMipTexture );
|
||
|
|
||
|
addNodeClass( 'ViewportTextureNode', ViewportTextureNode );
|