BufferAttribute - Verge3D User Manual - Soft8Soft
Description: Learn how to use BufferAttribute in your interactive 3D apps made with Verge3D

# BufferAttribute

This class stores data for an attribute (such as vertex positions, face indices, normals, colors, UVs, and any custom attributes) associated with a BufferGeometry, which allows for more efficient passing of data to the GPU. See that page for details and a usage example.

When working with vector-like data, the .fromBufferAttribute(attribute, index) helper methods on Vector2, Vector3, Vector4, and Color classes may be helpful.

## Constructor

### BufferAttribute(array : TypedArray, itemSize : Integer, normalized : Boolean)

- array — must be a TypedArray. Used to instantiate the buffer. This array should have `itemSize * numVertices` elements, where numVertices is the number of vertices in the associated BufferGeometry.
- itemSize — the number of values of the array that should be associated with a particular vertex. For instance, if this attribute is storing a 3-component vector (such as a position, normal, or color), then `itemSize` should be `3`.
- normalized — (optional) applies to integer data only. Indicates how the underlying data in the buffer maps to the values in the GLSL code. For instance, if array is an instance of UInt16Array, and normalized is `true`, the values `0 - +65535` in the array data will be mapped to `0.0f - +1.0f` in the GLSL attribute. An Int16Array (signed) would map from `-32768 - +32767` to `-1.0f - +1.0f`. If normalized is `false`, the values will be converted to floats unmodified, i.e. `32767` becomes `32767.0f`.

## Properties

### # .array : TypedArray

The array holding data stored in the buffer.

### # .count : Integer

Stores the array's length divided by the itemSize.

If the buffer is storing a 3-component vector (such as a position, normal, or color), then this will count the number of such vectors stored.

### # .isBufferAttribute : Boolean

Read-only flag to check if a given object is of type BufferAttribute.

### # .itemSize : Integer

The length of vectors that are being stored in the array.

### # .name : String

Optional name for this attribute instance. Default is an empty string.

### # .needsUpdate : Boolean

Flag to indicate that this attribute has changed and should be re-sent to the GPU. Set this to true when you modify the value of the array.

Setting this to `true` also increments the version.

### # .normalized : Boolean

Indicates how the underlying data in the buffer maps to the values in the GLSL shader code. See the constructor above for details.

### # .onUploadCallback : Function

A callback function that is executed after the Renderer has transferred the attribute array data to the GPU.

### # .updateRange : Object

Object containing:

- offset: Default is `0`. Position at which to start update.
- count: Default is `-1`, which means don't use update ranges.

This can be used to only update some components of stored vectors (for example, just the component related to color).

### # .usage : Usage

Defines the intended usage pattern of the data store for optimization purposes. Corresponds to the `usage` parameter of WebGLRenderingContext.bufferData(). Default is StaticDrawUsage. See usage constants for all possible values.

After the initial use of a buffer, its usage cannot be changed. Instead, instantiate a new one and set the desired usage before the next render.

### # .version : Integer

A version number, incremented every time the needsUpdate property is set to `true`.

## Methods

### # .applyMatrix3(m : Matrix3) → this

Applies matrix m to every Vector3 element of this BufferAttribute.

### # .applyMatrix4(m : Matrix4) → this

Applies matrix m to every Vector3 element of this BufferAttribute.

### # .applyNormalMatrix(m : Matrix3) → this

Applies normal matrix m to every Vector3 element of this BufferAttribute.

### # .transformDirection(m : Matrix4) → this

Applies matrix m to every Vector3 element of this BufferAttribute, interpreting the elements as a direction vectors.

### # .clone() → BufferAttribute

Return a copy of this BufferAttribute.

### # .copy(bufferAttribute : BufferAttribute) → this

Copies another BufferAttribute to this BufferAttribute.

### # .copyArray(array) → this

Copy the specified array (which can be a normal array or TypedArray) into array.

See TypedArray.set for notes on requirements if copying a TypedArray.

### # .copyAt(index1 : Integer, bufferAttribute : BufferAttribute, index2 : Integer) → this

Copy a vector from bufferAttribute[index2] to array[index1].

### # .getX(index : Integer) → Float

Returns the x component of the vector at the given index.

### # .getY(index : Integer) → Float

Returns the y component of the vector at the given index.

### # .getZ(index : Integer) → Float

Returns the z component of the vector at the given index.

### # .getW(index : Integer) → Float

Returns the w component of the vector at the given index.

### # .onUpload(callback : Function) → this

Sets the value of the onUploadCallback property.

### # .set(value : Array, offset : Integer) → this

- value — an Array or TypedArray from which to copy values.
- offset — (optional) index of the array at which to start copying.

Calls TypedArray.set(value, offset) on the array.

In particular, see that page for requirements on value being a TypedArray.

### # .setUsage(value : Usage) → this

Set usage to value. See usage constants for all possible input values.

After the initial use of a buffer, its usage cannot be changed. Instead, instantiate a new one and set the desired usage before the next render.

### # .setX(index : Integer, x : Float) → this

Sets the x component of the vector at the given index.

### # .setY(index : Integer, y : Float) → this

Sets the y component of the vector at the given index.

### # .setZ(index : Integer, z : Float) → this

Sets the z component of the vector at the given index.

### # .setW(index : Integer, w : Float) → this

Sets the w component of the vector at the given index.

### # .setXY(index : Integer, x : Float, y : Float) → this

Sets the x and y components of the vector at the given index.

### # .setXYZ(index : Integer, x : Float, y : Float, z : Float) → this

Sets the x, y and z components of the vector at the given index.

### # .setXYZW(index : Integer, x : Float, y : Float, z : Float, w : Float) → this

Sets the x, y, z and w components of the vector at the given index.

## Source

For more info on how to obtain the source code of this module see this page.