Skip to content

⬅️ Back to Table of Contents

📄 StorageArrayElementNode.js

📊 Analysis Summary

Metric Count
🔧 Functions 3
🧱 Classes 1
📦 Imports 2
📊 Variables & Constants 3

📚 Table of Contents

🛠️ File Location:

📂 src/nodes/utils/StorageArrayElementNode.js

📦 Imports

Name Source
nodeProxy ../tsl/TSLBase.js
ArrayElementNode ./ArrayElementNode.js

Variables & Constants

Name Type Kind Value Exported
structTypeNode any let/var this.storageBufferNode.structTypeNode
snippet any let/var *not shown*
isAssignContext any let/var builder.context.assign

Functions

StorageArrayElementNode.getMemberType(builder: any, name: any): any

Parameters:

  • builder any
  • name any

Returns: any

Calls:

  • structTypeNode.getMemberType
Code
getMemberType( builder, name ) {

        const structTypeNode = this.storageBufferNode.structTypeNode;

        if ( structTypeNode ) {

            return structTypeNode.getMemberType( builder, name );

        }

        return 'void';

    }

StorageArrayElementNode.setup(builder: any): Node

Parameters:

  • builder any

Returns: Node

Calls:

  • builder.isAvailable
  • builder.setupPBO
  • super.setup
Code
setup( builder ) {

        if ( builder.isAvailable( 'storageBuffer' ) === false ) {

            if ( this.node.isPBO === true ) {

                builder.setupPBO( this.node );

            }

        }

        return super.setup( builder );

    }

StorageArrayElementNode.generate(builder: any, output: any): any

Parameters:

  • builder any
  • output any

Returns: any

Calls:

  • builder.isAvailable
  • builder.generatePBO
  • this.node.build
  • super.generate
  • this.getNodeType
  • builder.format

Internal Comments:

//

Code
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;

    }

Classes

StorageArrayElementNode

Class Code
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;

    }

}

Methods

getMemberType(builder: any, name: any): any
Code
getMemberType( builder, name ) {

        const structTypeNode = this.storageBufferNode.structTypeNode;

        if ( structTypeNode ) {

            return structTypeNode.getMemberType( builder, name );

        }

        return 'void';

    }
setup(builder: any): Node
Code
setup( builder ) {

        if ( builder.isAvailable( 'storageBuffer' ) === false ) {

            if ( this.node.isPBO === true ) {

                builder.setupPBO( this.node );

            }

        }

        return super.setup( builder );

    }
generate(builder: any, output: any): any
Code
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;

    }