@openhps/core
Version:
Open Hybrid Positioning System - Core component
122 lines (111 loc) • 4.63 kB
JavaScript
;
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);