UNPKG

three

Version:

JavaScript 3D library

99 lines (77 loc) 2.38 kB
import TempNode from '../core/TempNode.js'; import { nodeProxyIntent } from '../tsl/TSLCore.js'; /** * This node represents an operation that packs floating-point values of a vector into an unsigned 32-bit integer * * @augments TempNode */ class PackFloatNode extends TempNode { static get type() { return 'PackFloatNode'; } /** * * @param {'snorm' | 'unorm' | 'float16'} encoding - The numeric encoding that describes how the float values are mapped to the integer range. * @param {Node} vectorNode - The vector node to be packed */ constructor( encoding, vectorNode ) { super(); /** * The vector to be packed. * * @type {Node} */ this.vectorNode = vectorNode; /** * The numeric encoding. * * @type {string} */ this.encoding = encoding; /** * This flag can be used for type testing. * * @type {boolean} * @readonly * @default true */ this.isPackFloatNode = true; } getNodeType() { return 'uint'; } generate( builder ) { const inputType = this.vectorNode.getNodeType( builder ); return `${ builder.getFloatPackingMethod( this.encoding ) }(${ this.vectorNode.build( builder, inputType )})`; } } export default PackFloatNode; /** * Converts each component of the normalized float to 16-bit integer values. The results are packed into a single unsigned integer. * round(clamp(c, -1, +1) * 32767.0) * * @tsl * @function * @param {Node<vec2>} value - The 2-component vector to be packed * @returns {Node} */ export const packSnorm2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'snorm' ).setParameterLength( 1 ); /** * Converts each component of the normalized float to 16-bit integer values. The results are packed into a single unsigned integer. * round(clamp(c, 0, +1) * 65535.0) * * @tsl * @function * @param {Node<vec2>} value - The 2-component vector to be packed * @returns {Node} */ export const packUnorm2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'unorm' ).setParameterLength( 1 ); /** * Converts each component of the vec2 to 16-bit floating-point values. The results are packed into a single unsigned integer. * * @tsl * @function * @param {Node<vec2>} value - The 2-component vector to be packed * @returns {Node} */ export const packHalf2x16 = /*@__PURE__*/ nodeProxyIntent( PackFloatNode, 'float16' ).setParameterLength( 1 );