Skip to content

Documentation / scene / Primitive

Class: Primitive

Defined in: libs/scene/src/render/primitive.ts:44

Holds vertex/index data and draw parameters for a mesh geometry.

Responsibilities:

  • Owns one or more vertex buffers and an optional index buffer.
  • Defines primitive topology, draw range (start/count), and vertex layout.
  • Provides utilities to create/set/remove buffers and query vertex/face counts.
  • Tracks changes via a change tag and notifies render-bundle caching.
  • Optionally stores a bounding volume and supports ray intersection tests.

Ownership and lifecycle:

  • When adding buffers (setVertexBuffer, setIndexBuffer), the primitive retains them.
  • When removing/overwriting buffers, the primitive releases the previous buffers.
  • Disposing the primitive also disposes the internal VertexLayout and releases retained buffers.

Extends

  • object & Disposable<this>

Extended by

Implements

  • Clonable<Primitive>

Constructors

Constructor

new Primitive(): Primitive

Defined in: libs/scene/src/render/primitive.ts:81

Create an empty primitive.

Defaults:

  • Primitive type: 'triangle-list'
  • indexStart = 0, indexCount = null (auto-computed)
  • No vertex/index buffers attached
  • No bounding volume

Returns

Primitive

Overrides

makeObservable(Disposable)<{ bv_changed: []; }>().constructor

Accessors

disposed

Get Signature

get disposed(): boolean

Defined in: libs/base/dist/index.d.ts:6065

Returns

boolean

Inherited from

makeObservable(Disposable)<{ bv_changed: []; }>().disposed


id

Get Signature

get id(): number

Defined in: libs/scene/src/render/primitive.ts:100

Unique runtime identifier of this primitive.

Returns

number

The numeric instance id.


changeTag

Get Signature

get changeTag(): number

Defined in: libs/scene/src/render/primitive.ts:109

Change tag that increments whenever draw-affecting state changes. Useful for invalidating cached render bundles.

Returns

number

The current change tag value.


primitiveType

Get Signature

get primitiveType(): PrimitiveType

Defined in: libs/scene/src/render/primitive.ts:146

Primitive topology.

Returns

PrimitiveType

Set Signature

set primitiveType(type): void

Defined in: libs/scene/src/render/primitive.ts:149

Parameters
type

PrimitiveType

Returns

void


indexStart

Get Signature

get indexStart(): number

Defined in: libs/scene/src/render/primitive.ts:159

Starting index/vertex for drawing.

Returns

number

Set Signature

set indexStart(val): void

Defined in: libs/scene/src/render/primitive.ts:162

Parameters
val

number

Returns

void


indexCount

Get Signature

get indexCount(): number

Defined in: libs/scene/src/render/primitive.ts:172

Number of indices/vertices to draw.

Returns

number

Set Signature

set indexCount(val): void

Defined in: libs/scene/src/render/primitive.ts:176

Parameters
val

number

Returns

void

Methods

on()

Call Signature

on<K>(type, listener, context?): void

Defined in: libs/base/dist/index.d.ts:635

IEventTarget.on

Type Parameters
K

K extends "dispose" | "bv_changed"

Parameters
type

K

listener

EventListener<object & object, K>

context?

unknown

Returns

void

Inherited from

makeObservable(Disposable)<{ bv_changed: []; }>().on

Call Signature

on<K>(type, listener, context?): void

Defined in: libs/base/dist/index.d.ts:594

IEventTarget.on

Type Parameters
K

K extends "dispose"

Parameters
type

K

listener

EventListener<{ dispose: []; }, K>

context?

unknown

Returns

void

Inherited from

makeObservable(Disposable)<{ bv_changed: []; }>().on


once()

Call Signature

once<K>(type, listener, context?): void

Defined in: libs/base/dist/index.d.ts:639

IEventTarget.once

Type Parameters
K

K extends "dispose" | "bv_changed"

Parameters
type

K

listener

EventListener<object & object, K>

context?

unknown

Returns

void

Inherited from

makeObservable(Disposable)<{ bv_changed: []; }>().once

Call Signature

once<K>(type, listener, context?): void

Defined in: libs/base/dist/index.d.ts:598

IEventTarget.once

Type Parameters
K

K extends "dispose"

Parameters
type

K

listener

EventListener<{ dispose: []; }, K>

context?

unknown

Returns

void

Inherited from

makeObservable(Disposable)<{ bv_changed: []; }>().once


off()

Call Signature

off<K>(type, listener, context?): void

Defined in: libs/base/dist/index.d.ts:643

IEventTarget.off

Type Parameters
K

K extends "dispose" | "bv_changed"

Parameters
type

K

listener

EventListener<object & object, K>

context?

unknown

Returns

void

Inherited from

makeObservable(Disposable)<{ bv_changed: []; }>().off

Call Signature

off<K>(type, listener?, context?): void

Defined in: libs/base/dist/index.d.ts:602

IEventTarget.off

Type Parameters
K

K extends "dispose"

Parameters
type

K

listener?

EventListener<{ dispose: []; }>

context?

unknown

Returns

void

Inherited from

makeObservable(Disposable)<{ bv_changed: []; }>().off


dispatchEvent()

Call Signature

dispatchEvent<K>(type, ...args): void

Defined in: libs/base/dist/index.d.ts:647

IEventTarget.dispatchEvent

Type Parameters
K

K extends "dispose" | "bv_changed"

Parameters
type

K

args

...object & object[K]

Returns

void

Inherited from

makeObservable(Disposable)<{ bv_changed: []; }>().dispatchEvent

Call Signature

dispatchEvent<K>(type, ...args): void

Defined in: libs/base/dist/index.d.ts:606

IEventTarget.dispatchEvent

Type Parameters
K

K extends "dispose"

Parameters
type

K

args

...object[K]

Returns

void

Inherited from

makeObservable(Disposable)<{ bv_changed: []; }>().dispatchEvent


dispose()

dispose(): void

Defined in: libs/base/dist/index.d.ts:6066

Returns

void

Inherited from

makeObservable(Disposable)<{ bv_changed: []; }>().dispose


clone()

clone(): Primitive

Defined in: libs/scene/src/render/primitive.ts:119

Create a shallow clone: copies topology, draw range, and buffers.

Note: Buffers are re-retained on the new primitive.

Returns

Primitive

A cloned Primitive instance.

Implementation of

Clonable.clone


copyFrom()

copyFrom(other): void

Defined in: libs/scene/src/render/primitive.ts:134

Copy from another primitive.

Copies:

  • All vertex buffers and the index buffer
  • Primitive type, index start, index count

Parameters

other

this

The source primitive to copy from.

Returns

void

void


getNumVertices()

getNumVertices(): number

Defined in: libs/scene/src/render/primitive.ts:188

Query total vertex count from the position buffer, if present.

Returns

number

Total vertex count; 0 if no position buffer is set.


getNumFaces()

getNumFaces(): number

Defined in: libs/scene/src/render/primitive.ts:200

Query total face/segment count based on topology and buffer size.

  • For indexed geometry: derived from index buffer.
  • For non-indexed: derived from position vertex count.

Returns

number

Total primitive count for the current topology.


removeVertexBuffer()

removeVertexBuffer(semantic): void

Defined in: libs/scene/src/render/primitive.ts:230

Remove all vertex buffers that match a given semantic.

This releases retained buffers, marks the layout dirty, and invalidates bundles.

Parameters

semantic

VertexSemantic

The vertex semantic to remove (e.g., 'position', 'normal').

Returns

void

void


getVertexBuffer()

getVertexBuffer(semantic): StructuredBuffer<unknown>

Defined in: libs/scene/src/render/primitive.ts:250

Get the vertex buffer that matches a given semantic.

Parameters

semantic

VertexSemantic

The vertex semantic to look up.

Returns

StructuredBuffer<unknown>

The matching vertex buffer, or null if not found.


getVertexBufferInfo()

getVertexBufferInfo(semantic): VertexBufferInfo

Defined in: libs/scene/src/render/primitive.ts:264

Get vertex buffer information for a given semantic.

Parameters

semantic

VertexSemantic

The vertex semantic to look up.

Returns

VertexBufferInfo

The VertexBufferInfo, or null if not found.


createAndSetVertexBuffer()

createAndSetVertexBuffer(format, data, stepMode?): StructuredBuffer<unknown>

Defined in: libs/scene/src/render/primitive.ts:279

Create a vertex buffer from data and add it to the primitive.

  • For interleaved layouts, pass an array of VertexAttribFormat.
  • For a single attribute, pass a single VertexAttribFormat.

Parameters

format

VertexAttribFormat | VertexAttribFormat[]

Vertex attribute format(s).

data

TypedArray

Typed array with vertex data.

stepMode?

VertexStepMode

Optional step mode (e.g., 'vertex', 'instance').

Returns

StructuredBuffer<unknown>

The created StructuredBuffer.


setVertexBuffer()

setVertexBuffer(buffer, stepMode?): StructuredBuffer<unknown>

Defined in: libs/scene/src/render/primitive.ts:299

Add an existing vertex buffer to the primitive.

Ownership note: The primitive retains the buffer; it will be released or disposed when replaced or on dispose.

Parameters

buffer

StructuredBuffer

The vertex buffer to add.

stepMode?

VertexStepMode

Optional step mode for the buffer.

Returns

StructuredBuffer<unknown>

The same buffer.


createAndSetIndexBuffer()

createAndSetIndexBuffer(data, dynamic?): IndexBuffer<unknown>

Defined in: libs/scene/src/render/primitive.ts:317

Create an index buffer from data and set it on the primitive.

Parameters

data

Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>

Index data as Uint16Array or Uint32Array.

dynamic?

boolean

Whether the index buffer is dynamic (unmanaged).

Returns

IndexBuffer<unknown>

The created IndexBuffer.


setIndexBuffer()

setIndexBuffer(buffer): void

Defined in: libs/scene/src/render/primitive.ts:335

Set or replace the index buffer.

Ownership note: The primitive retains the buffer; previous buffer is released. Marks the vertex layout dirty and invalidates bundles.

Parameters

buffer

IndexBuffer<unknown>

The index buffer to set (non-null).

Returns

void

void


getIndexBuffer()

getIndexBuffer(): IndexBuffer<unknown>

Defined in: libs/scene/src/render/primitive.ts:350

Get the current index buffer.

Returns

IndexBuffer<unknown>

The index buffer, or undefined/null if none set.


draw()

draw(): void

Defined in: libs/scene/src/render/primitive.ts:358

Issue a non-instanced draw for the current topology and range.

Preconditions: A valid vertex layout and indexCount > 0.

Returns

void


drawInstanced()

drawInstanced(numInstances): void

Defined in: libs/scene/src/render/primitive.ts:371

Issue an instanced draw for the current topology and range.

Preconditions: A valid vertex layout and indexCount > 0.

Parameters

numInstances

number

Number of instances to draw.

Returns

void


onDispose()

protected onDispose(): void

Defined in: libs/scene/src/render/primitive.ts:380

Dispose this primitive and release associated GPU resources.

Returns

void

Overrides

makeObservable(Disposable)<{ bv_changed: []; }>().onDispose


getBoundingVolume()

getBoundingVolume(): BoundingVolume

Defined in: libs/scene/src/render/primitive.ts:405

Get the bounding volume associated with this primitive.

Returns

BoundingVolume

The current bounding volume, or null if not set.


setBoundingVolume()

setBoundingVolume(bv): void

Defined in: libs/scene/src/render/primitive.ts:416

Set or replace the bounding volume of this primitive.

Triggers registered bounding-volume change callbacks.

Parameters

bv

BoundingVolume

The bounding volume to set.

Returns

void

void


raycast()

raycast(ray): number

Defined in: libs/scene/src/render/primitive.ts:428

Test intersection against the current axis-aligned bounding box (AABB).

Parameters

ray

Ray

Ray to test against the primitive's AABB (derived from its bounding volume).

Returns

number

The distance from ray origin to the intersection, or null if no hit or no AABB.

Released under the MIT License.