12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import { addNodeClass } from '../core/Node.js';
- import { nodeProxy, addNodeElement } from '../shadernode/ShaderNode.js';
- import ArrayElementNode from './ArrayElementNode.js';
- class StorageArrayElementNode extends ArrayElementNode {
- constructor( storageBufferNode, indexNode ) {
- super( storageBufferNode, indexNode );
- this.isStorageArrayElementNode = true;
- }
- set storageBufferNode( value ) {
- this.node = value;
- }
- get storageBufferNode() {
- return this.node;
- }
- setup( builder ) {
- if ( builder.isAvailable( 'storageBuffer' ) === false ) {
- if ( ! this.node.instanceIndex && this.node.bufferObject === true ) {
- builder.setupPBO( this.node );
- }
- }
- return super.setup( builder );
- }
- generate( builder, output ) {
- let snippet;
- const isAssignContext = builder.context.assign;
- //
- if ( builder.isAvailable( 'storageBuffer' ) === false ) {
- const { node } = this;
- if ( ! node.instanceIndex && this.node.bufferObject === true && isAssignContext !== true ) {
- snippet = builder.generatePBO( this );
- } else {
- snippet = 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;
- export const storageElement = nodeProxy( StorageArrayElementNode );
- addNodeElement( 'storageElement', storageElement );
- addNodeClass( 'StorageArrayElementNode', StorageArrayElementNode );
|