first app vibe
This commit is contained in:
138
app/node_modules/three/src/nodes/display/ViewportTextureNode.js
generated
vendored
Normal file
138
app/node_modules/three/src/nodes/display/ViewportTextureNode.js
generated
vendored
Normal file
@@ -0,0 +1,138 @@
|
||||
import TextureNode from '../accessors/TextureNode.js';
|
||||
import { NodeUpdateType } from '../core/constants.js';
|
||||
import { nodeProxy } from '../tsl/TSLBase.js';
|
||||
import { screenUV } from './ScreenNode.js';
|
||||
|
||||
import { Vector2 } from '../../math/Vector2.js';
|
||||
import { FramebufferTexture } from '../../textures/FramebufferTexture.js';
|
||||
import { LinearMipmapLinearFilter } from '../../constants.js';
|
||||
|
||||
const _size = /*@__PURE__*/ new Vector2();
|
||||
|
||||
/**
|
||||
* A special type of texture node which represents the data of the current viewport
|
||||
* as a texture. The module extracts data from the current bound framebuffer with
|
||||
* a copy operation so no extra render pass is required to produce the texture data
|
||||
* (which is good for performance). `ViewportTextureNode` can be used as an input for a
|
||||
* variety of effects like refractive or transmissive materials.
|
||||
*
|
||||
* @augments TextureNode
|
||||
*/
|
||||
class ViewportTextureNode extends TextureNode {
|
||||
|
||||
static get type() {
|
||||
|
||||
return 'ViewportTextureNode';
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new viewport texture node.
|
||||
*
|
||||
* @param {Node} [uvNode=screenUV] - The uv node.
|
||||
* @param {?Node} [levelNode=null] - The level node.
|
||||
* @param {?Texture} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
|
||||
*/
|
||||
constructor( uvNode = screenUV, levelNode = null, framebufferTexture = null ) {
|
||||
|
||||
if ( framebufferTexture === null ) {
|
||||
|
||||
framebufferTexture = new FramebufferTexture();
|
||||
framebufferTexture.minFilter = LinearMipmapLinearFilter;
|
||||
|
||||
}
|
||||
|
||||
super( framebufferTexture, uvNode, levelNode );
|
||||
|
||||
/**
|
||||
* Whether to generate mipmaps or not.
|
||||
*
|
||||
* @type {boolean}
|
||||
* @default false
|
||||
*/
|
||||
this.generateMipmaps = false;
|
||||
|
||||
/**
|
||||
* This flag can be used for type testing.
|
||||
*
|
||||
* @type {boolean}
|
||||
* @readonly
|
||||
* @default true
|
||||
*/
|
||||
this.isOutputTextureNode = true;
|
||||
|
||||
/**
|
||||
* The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders the
|
||||
* scene once per frame in its {@link ViewportTextureNode#updateBefore} method.
|
||||
*
|
||||
* @type {string}
|
||||
* @default 'frame'
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* TSL function for creating a viewport texture node.
|
||||
*
|
||||
* @tsl
|
||||
* @function
|
||||
* @param {?Node} [uvNode=screenUV] - The uv node.
|
||||
* @param {?Node} [levelNode=null] - The level node.
|
||||
* @param {?Texture} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
|
||||
* @returns {ViewportTextureNode}
|
||||
*/
|
||||
export const viewportTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode ).setParameterLength( 0, 3 );
|
||||
|
||||
/**
|
||||
* TSL function for creating a viewport texture node with enabled mipmap generation.
|
||||
*
|
||||
* @tsl
|
||||
* @function
|
||||
* @param {?Node} [uvNode=screenUV] - The uv node.
|
||||
* @param {?Node} [levelNode=null] - The level node.
|
||||
* @param {?Texture} [framebufferTexture=null] - A framebuffer texture holding the viewport data. If not provided, a framebuffer texture is created automatically.
|
||||
* @returns {ViewportTextureNode}
|
||||
*/
|
||||
export const viewportMipTexture = /*@__PURE__*/ nodeProxy( ViewportTextureNode, null, null, { generateMipmaps: true } ).setParameterLength( 0, 3 );
|
||||
Reference in New Issue
Block a user