92 lines
1.5 KiB
JavaScript
92 lines
1.5 KiB
JavaScript
|
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 );
|