Buckets:
| import { nodeProxy } from '../tsl/TSLBase.js'; | |
| import ArrayElementNode from './ArrayElementNode.js'; | |
| /** | |
| * This class enables element access on instances of {@link StorageBufferNode}. | |
| * In most cases, it is indirectly used when accessing elements with the | |
| * {@link StorageBufferNode#element} method. | |
| * | |
| * ```js | |
| * const position = positionStorage.element( instanceIndex ); | |
| * ``` | |
| * | |
| * @augments ArrayElementNode | |
| */ | |
| class StorageArrayElementNode extends ArrayElementNode { | |
| static get type() { | |
| return 'StorageArrayElementNode'; | |
| } | |
| /** | |
| * Constructs storage buffer element node. | |
| * | |
| * @param {StorageBufferNode} storageBufferNode - The storage buffer node. | |
| * @param {Node} indexNode - The index node that defines the element access. | |
| */ | |
| constructor( storageBufferNode, indexNode ) { | |
| super( storageBufferNode, indexNode ); | |
| /** | |
| * This flag can be used for type testing. | |
| * | |
| * @type {boolean} | |
| * @readonly | |
| * @default true | |
| */ | |
| this.isStorageArrayElementNode = true; | |
| } | |
| /** | |
| * The storage buffer node. | |
| * | |
| * @param {Node} value | |
| * @type {StorageBufferNode} | |
| */ | |
| set storageBufferNode( value ) { | |
| this.node = value; | |
| } | |
| get storageBufferNode() { | |
| return this.node; | |
| } | |
| getMemberType( builder, name ) { | |
| const structTypeNode = this.storageBufferNode.structTypeNode; | |
| if ( structTypeNode ) { | |
| return structTypeNode.getMemberType( builder, name ); | |
| } | |
| return 'void'; | |
| } | |
| setup( builder ) { | |
| if ( builder.isAvailable( 'storageBuffer' ) === false ) { | |
| if ( this.node.isPBO === true ) { | |
| builder.setupPBO( this.node ); | |
| } | |
| } | |
| return super.setup( builder ); | |
| } | |
| generate( builder, output ) { | |
| let snippet; | |
| const isAssignContext = builder.context.assign; | |
| // | |
| if ( builder.isAvailable( 'storageBuffer' ) === false ) { | |
| if ( this.node.isPBO === true && isAssignContext !== true && ( this.node.value.isInstancedBufferAttribute || builder.shaderStage !== 'compute' ) ) { | |
| snippet = builder.generatePBO( this ); | |
| } else { | |
| snippet = this.node.build( builder ); | |
| } | |
| } else { | |
| snippet = super.generate( builder ); | |
| } | |
| if ( isAssignContext !== true ) { | |
| const type = this.getNodeType( builder ); | |
| snippet = builder.format( snippet, type, output ); | |
| } | |
| return snippet; | |
| } | |
| } | |
| export default StorageArrayElementNode; | |
| /** | |
| * TSL function for creating a storage element node. | |
| * | |
| * @tsl | |
| * @function | |
| * @param {StorageBufferNode} storageBufferNode - The storage buffer node. | |
| * @param {Node} indexNode - The index node that defines the element access. | |
| * @returns {StorageArrayElementNode} | |
| */ | |
| export const storageElement = /*@__PURE__*/ nodeProxy( StorageArrayElementNode ).setParameterLength( 2 ); | |
Xet Storage Details
- Size:
- 2.71 kB
- Xet hash:
- d6ad1ebb7013b04a300276c32e0d6b03695468d9a3f16b18e3b911e6408fd2c4
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.