📄 threejs/Core/Nodes/StorageBufferNode

File: StorageBufferNode.md | Updated: 11/15/2025


title: StorageBufferNode category: Core layout: docs

StorageBufferNode

This node is used in context of compute shaders and allows to define a storage buffer for data. A typical workflow is to create instances of this node with the convenience functions attributeArray() or instancedArray(), setup up a compute shader that writes into the buffers and then convert the storage buffers to attribute nodes for rendering.

Code Example

const positionBuffer = instancedArray( particleCount, 'vec3' ); // the storage buffer node
const computeInit = Fn( () => { // the compute shader
	const position = positionBuffer.element( instanceIndex );
	// compute position data
	position.x = 1;
	position.y = 1;
	position.z = 1;
} )().compute( particleCount );
const particleMaterial = new THREE.SpriteNodeMaterial();
particleMaterial.positionNode = positionBuffer.toAttribute();
renderer.computeAsync( computeInit );

Constructor

new StorageBufferNode( value : StorageBufferAttribute | StorageInstancedBufferAttribute | BufferAttribute, bufferType : string | Struct, bufferCount : number )

Constructs a new storage buffer node.

value | The buffer data.
---|---
bufferType | The buffer type (e.g. 'vec3'). Default is null.
bufferCount | The buffer count. Default is 0.

Properties

.access : string

The access type of the texture node.

Default is 'readWrite'.

.global : boolean

StorageBufferNode sets this property to true by default.

Default is true.

Overrides: BufferNode#global

.isAtomic : boolean

Whether the node is atomic or not.

Default is false.

.isPBO : boolean

Whether the node represents a PBO or not. Only relevant for WebGL.

Default is false.

.isStorageBufferNode : boolean (readonly)

This flag can be used for type testing.

Default is true.

.structTypeNode : StructTypeNode

The buffer struct type.

Default is null.

Methods

.element( indexNode : IndexNode ) : StorageArrayElementNode

Enables element access with the given index node.

indexNode | The index node.
---|---

Returns: A node representing the element access.

.generate( builder : NodeBuilder ) : string

Generates the code snippet of the storage buffer node.

builder | The current node builder.
---|---

Overrides: BufferNode#generate

Returns: The generated code snippet.

.getAttributeData() : Object

Returns attribute data for this storage buffer node.

Returns: The attribute data.

.getHash( builder : NodeBuilder ) : string

This method is overwritten since the buffer data might be shared and thus the hash should be shared as well.

builder | The current node builder.
---|---

Overrides: BufferNode#getHash

Returns: The hash.

.getInputType( builder : NodeBuilder ) : string

Overwrites the default implementation to return a fixed value 'indirectStorageBuffer' or 'storageBuffer'.

builder | The current node builder.
---|---

Overrides: BufferNode#getInputType

Returns: The input type.

.getMemberType( builder : NodeBuilder, name : string ) : string

Returns the type of a member of the struct.

builder | The current node builder.
---|---
name | The name of the member.

Overrides: BufferNode#getMemberType

Returns: The type of the member.

.getNodeType( builder : NodeBuilder ) : string

This method is overwritten since the node type from the availability of storage buffers and the attribute data.

builder | The current node builder.
---|---

Overrides: BufferNode#getNodeType

Returns: The node type.

.getPBO() : boolean

Returns the isPBO value.

Returns: Whether the node represents a PBO or not.

.setAccess( value : string ) : StorageBufferNode

Defines the node access.

value | The node access.
---|---

Returns: A reference to this node.

.setAtomic( value : boolean ) : StorageBufferNode

Defines whether the node is atomic or not.

value | The atomic flag.
---|---

Returns: A reference to this node.

.setPBO( value : boolean ) : StorageBufferNode

Defines whether this node is a PBO or not. Only relevant for WebGL.

value | The value so set.
---|---

Returns: A reference to this node.

.toAtomic() : StorageBufferNode

Convenience method for making this node atomic.

Returns: A reference to this node.

.toReadOnly() : StorageBufferNode

Convenience method for configuring a read-only node access.

Returns: A reference to this node.

Source

src/nodes/accessors/StorageBufferNode.js