UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

122 lines (111 loc) 4.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.viewportTexture = exports.viewportMipTexture = exports.default = void 0; var _TextureNode = _interopRequireDefault(require("../accessors/TextureNode.js")); var _constants = require("../core/constants.js"); var _TSLBase = require("../tsl/TSLBase.js"); var _ScreenNode = require("./ScreenNode.js"); var _Vector = require("../../math/Vector2.js"); var _FramebufferTexture = require("../../textures/FramebufferTexture.js"); var _constants2 = require("../../constants.js"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const _size = /*@__PURE__*/new _Vector.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.default { 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 = _ScreenNode.screenUV, levelNode = null, framebufferTexture = null) { if (framebufferTexture === null) { framebufferTexture = new _FramebufferTexture.FramebufferTexture(); framebufferTexture.minFilter = _constants2.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 = _constants.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; } } var _default = exports.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} */ const viewportTexture = exports.viewportTexture = /*@__PURE__*/(0, _TSLBase.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} */ const viewportMipTexture = exports.viewportMipTexture = /*@__PURE__*/(0, _TSLBase.nodeProxy)(ViewportTextureNode, null, null, { generateMipmaps: true }).setParameterLength(0, 3);