Buckets:
| import TempNode from './TempNode.js'; | |
| import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js'; | |
| /** | |
| * ArrayNode represents a collection of nodes, typically created using the {@link array} function. | |
| * ```js | |
| * const colors = array( [ | |
| * vec3( 1, 0, 0 ), | |
| * vec3( 0, 1, 0 ), | |
| * vec3( 0, 0, 1 ) | |
| * ] ); | |
| * | |
| * const redColor = tintColors.element( 0 ); | |
| * | |
| * @augments TempNode | |
| */ | |
| class ArrayNode extends TempNode { | |
| static get type() { | |
| return 'ArrayNode'; | |
| } | |
| /** | |
| * Constructs a new array node. | |
| * | |
| * @param {?string} nodeType - The data type of the elements. | |
| * @param {number} count - Size of the array. | |
| * @param {?Array<Node>} [values=null] - Array default values. | |
| */ | |
| constructor( nodeType, count, values = null ) { | |
| super( nodeType ); | |
| /** | |
| * Array size. | |
| * | |
| * @type {number} | |
| */ | |
| this.count = count; | |
| /** | |
| * Array default values. | |
| * | |
| * @type {?Array<Node>} | |
| */ | |
| this.values = values; | |
| /** | |
| * This flag can be used for type testing. | |
| * | |
| * @type {boolean} | |
| * @readonly | |
| * @default true | |
| */ | |
| this.isArrayNode = true; | |
| } | |
| /** | |
| * Returns the node's type. | |
| * | |
| * @param {NodeBuilder} builder - The current node builder. | |
| * @return {string} The type of the node. | |
| */ | |
| getNodeType( builder ) { | |
| if ( this.nodeType === null ) { | |
| this.nodeType = this.values[ 0 ].getNodeType( builder ); | |
| } | |
| return this.nodeType; | |
| } | |
| /** | |
| * Returns the node's type. | |
| * | |
| * @param {NodeBuilder} builder - The current node builder. | |
| * @return {string} The type of the node. | |
| */ | |
| getElementType( builder ) { | |
| return this.getNodeType( builder ); | |
| } | |
| /** | |
| * This method builds the output node and returns the resulting array as a shader string. | |
| * | |
| * @param {NodeBuilder} builder - The current node builder. | |
| * @return {string} The generated shader string. | |
| */ | |
| generate( builder ) { | |
| const type = this.getNodeType( builder ); | |
| return builder.generateArray( type, this.count, this.values ); | |
| } | |
| } | |
| export default ArrayNode; | |
| /** | |
| * TSL function for creating an array node. | |
| * | |
| * @tsl | |
| * @function | |
| * @param {string|Array<Node>} nodeTypeOrValues - A string representing the element type (e.g., 'vec3') | |
| * or an array containing the default values (e.g., [ vec3() ]). | |
| * @param {?number} [count] - Size of the array. | |
| * @returns {ArrayNode} | |
| */ | |
| export const array = ( ...params ) => { | |
| let node; | |
| if ( params.length === 1 ) { | |
| const values = params[ 0 ]; | |
| node = new ArrayNode( null, values.length, values ); | |
| } else { | |
| const nodeType = params[ 0 ]; | |
| const count = params[ 1 ]; | |
| node = new ArrayNode( nodeType, count ); | |
| } | |
| return nodeObject( node ); | |
| }; | |
| addMethodChaining( 'toArray', ( node, count ) => array( Array( count ).fill( node ) ) ); | |
Xet Storage Details
- Size:
- 2.73 kB
- Xet hash:
- abe3e2f561ece98761d467b84fff59e879dc8b0d6431e66fd2e6a982a5e0c18a
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.