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
VertexLayoutand 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()
protectedonDispose():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
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
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.