Skip to main content

Class: GPUVectorModel

Defined in: modules/engine/src/model/gpu-vector-model.ts:216

High level draw API for luma.gl.

A GPUVectorModel encapsulates shaders, geometry attributes, bindings and render pipeline state into a single object. It automatically reuses and rebuilds pipelines as render parameters change and exposes convenient hooks for updating uniforms and attributes.

Features:

  • Reuses and lazily recompiles RenderPipeline | pipelines as needed.
  • Integrates with @luma.gl/shaders to assemble GLSL or WGSL from shader modules.
  • Manages geometry attributes and buffer bindings.
  • Accepts textures, samplers and uniform buffers as bindings, including texture binding sources.
  • Provides detailed debug logging and optional shader source inspection.

Extended by​

Constructors​

Constructor​

new GPUVectorModel(device, props): GPUVectorModel

Defined in: modules/engine/src/model/gpu-vector-model.ts:401

Parameters​

device​

Device

props​

GPUVectorModelProps

Returns​

GPUVectorModel

Properties​

_attributeInfos​

_attributeInfos: Record<string, AttributeInfo> = {}

Defined in: modules/engine/src/model/gpu-vector-model.ts:362


_lastDrawTimestamp​

_lastDrawTimestamp: number = -1

Defined in: modules/engine/src/model/gpu-vector-model.ts:389

"Time" of last draw. Monotonically increasing timestamp


_lastLogTime​

_lastLogTime: number = 0

Defined in: modules/engine/src/model/gpu-vector-model.ts:1702

Throttle draw call logging


_logOpen​

_logOpen: boolean = false

Defined in: modules/engine/src/model/gpu-vector-model.ts:1703


_pipelineNeedsUpdate​

_pipelineNeedsUpdate: string | false = 'newly created'

Defined in: modules/engine/src/model/gpu-vector-model.ts:382


_uniformStore​

_uniformStore: UniformStore

Defined in: modules/engine/src/model/gpu-vector-model.ts:360


bindings​

bindings: Record<string, ModelBinding> = {}

Defined in: modules/engine/src/model/gpu-vector-model.ts:341

Bindings (textures, samplers, uniform buffers)


bufferAttributes​

bufferAttributes: Record<string, Buffer> = {}

Defined in: modules/engine/src/model/gpu-vector-model.ts:337

Buffer-valued attributes


bufferLayout​

bufferLayout: BufferLayout[]

Defined in: modules/engine/src/model/gpu-vector-model.ts:317

Buffer layout


constantAttributes​

constantAttributes: Record<string, TypedArray> = {}

Defined in: modules/engine/src/model/gpu-vector-model.ts:339

Constant-valued attributes


device​

readonly device: Device

Defined in: modules/engine/src/model/gpu-vector-model.ts:290

Device that created this model


firstIndex​

firstIndex: number

Defined in: modules/engine/src/model/gpu-vector-model.ts:332

First index element for WebGPU indexed draws.


firstVertex​

firstVertex: number

Defined in: modules/engine/src/model/gpu-vector-model.ts:330

First vertex byte offset for WebGL indexed draws or first vertex for non-indexed draws.


fs​

readonly fs: string

Defined in: modules/engine/src/model/gpu-vector-model.ts:301

GLSL fragment shader source


id​

readonly id: string

Defined in: modules/engine/src/model/gpu-vector-model.ts:292

Application provided identifier


indexBuffer​

indexBuffer: Buffer | null = null

Defined in: modules/engine/src/model/gpu-vector-model.ts:335

Index buffer


indexCount​

indexCount: number | undefined

Defined in: modules/engine/src/model/gpu-vector-model.ts:328

Indexed draw count override. Undefined uses vertexCount, then the full bound index buffer.


instanceCount​

instanceCount: number = 0

Defined in: modules/engine/src/model/gpu-vector-model.ts:324

instance count. undefined means not instanced


isInstanced​

isInstanced: boolean | undefined = undefined

Defined in: modules/engine/src/model/gpu-vector-model.ts:322

Use instanced rendering


parameters​

parameters: RenderPipelineParameters

Defined in: modules/engine/src/model/gpu-vector-model.ts:312

The render pipeline GPU parameters, depth testing etc


pipeline​

pipeline: RenderPipeline

Defined in: modules/engine/src/model/gpu-vector-model.ts:354

The underlying GPU "program".

Note​

May be recreated if parameters change


pipelineFactory​

readonly pipelineFactory: PipelineFactory

Defined in: modules/engine/src/model/gpu-vector-model.ts:303

Factory used to create render pipelines


shaderFactory​

readonly shaderFactory: ShaderFactory

Defined in: modules/engine/src/model/gpu-vector-model.ts:305

Factory used to create shaders


shaderInputs​

shaderInputs: ShaderInputs

Defined in: modules/engine/src/model/gpu-vector-model.ts:358

ShaderInputs instance


source​

readonly source: string

Defined in: modules/engine/src/model/gpu-vector-model.ts:295

WGSL shader source when using unified shader


topology​

topology: PrimitiveTopology

Defined in: modules/engine/src/model/gpu-vector-model.ts:315

The primitive topology


transformFeedback​

transformFeedback: TransformFeedback | null = null

Defined in: modules/engine/src/model/gpu-vector-model.ts:351

TransformFeedback, WebGL 2 only.


userData​

userData: object = {}

Defined in: modules/engine/src/model/gpu-vector-model.ts:307

User-supplied per-model data

Index Signature​

[key: string]: unknown


vertexArray​

vertexArray: VertexArray

Defined in: modules/engine/src/model/gpu-vector-model.ts:348

VertexArray

Note​

not implemented: if bufferLayout is updated, vertex array has to be rebuilt!

Todo​

  • allow application to define multiple vertex arrays?

vertexCount​

vertexCount: number

Defined in: modules/engine/src/model/gpu-vector-model.ts:326

Vertex count


vs​

readonly vs: string

Defined in: modules/engine/src/model/gpu-vector-model.ts:298

GLSL vertex shader source


defaultProps​

static defaultProps: Required<GPUVectorModelProps>

Defined in: modules/engine/src/model/gpu-vector-model.ts:249

Accessors​

[toStringTag]​

Get Signature​

get [toStringTag](): string

Defined in: modules/engine/src/model/gpu-vector-model.ts:393

Returns​

string

Methods​

_areBindingsLoading()​

_areBindingsLoading(): string | false

Defined in: modules/engine/src/model/gpu-vector-model.ts:1496

Check that bindings are loaded. Returns id of first binding that is still loading.

Returns​

string | false


_getAttributeDebugTable()​

_getAttributeDebugTable(): Record<string, Record<string, unknown>>

Defined in: modules/engine/src/model/gpu-vector-model.ts:1754

Returns​

Record<string, Record<string, unknown>>


_getBindGroupCacheKeys()​

_getBindGroupCacheKeys(): Partial<Record<number, object>>

Defined in: modules/engine/src/model/gpu-vector-model.ts:1538

Returns​

Partial<Record<number, object>>


_getBindGroups()​

_getBindGroups(shaderLayout?, bindings?): BindingsByGroup

Defined in: modules/engine/src/model/gpu-vector-model.ts:1529

Groups resolved resource bindings for the current shader layout.

Parameters​

shaderLayout?​

AnyShaderLayout = ...

Reflected bindings used to group logical binding names.

bindings?​

Record<string, Binding> = ...

GPUVectorModel bindings already resolved for this draw preparation.

Returns​

BindingsByGroup


_getBindings()​

_getBindings(shaderLayout?): Record<string, Binding>

Defined in: modules/engine/src/model/gpu-vector-model.ts:1509

Resolves ready model bindings for the current shader layout.

Parameters​

shaderLayout?​

AnyShaderLayout = ...

Reflected bindings used to select copied or external texture resolution.

Returns​

Record<string, Binding>


_getBindingsUpdateTimestamp()​

_getBindingsUpdateTimestamp(): number

Defined in: modules/engine/src/model/gpu-vector-model.ts:1543

Get the timestamp of the latest updated bound GPU memory resource (buffer/texture).

Returns​

number


_getBufferOrConstantValues()​

_getBufferOrConstantValues(attribute, dataType): string

Defined in: modules/engine/src/model/gpu-vector-model.ts:1782

Parameters​

attribute​

TypedArray | Buffer

dataType​

any

Returns​

string


_logDrawCallEnd()​

_logDrawCallEnd(): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1718

Returns​

void


_logDrawCallStart()​

_logDrawCallStart(): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1705

Returns​

void


_logFramebuffer()​

_logFramebuffer(renderPass): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1739

Parameters​

renderPass​

RenderPass

Returns​

void


_setPipelineNeedsUpdate()​

_setPipelineNeedsUpdate(reason): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1580

Mark pipeline as needing update

Parameters​

reason​

string

Returns​

void


_updatePipeline()​

_updatePipeline(): RenderPipeline

Defined in: modules/engine/src/model/gpu-vector-model.ts:1587

Update pipeline if needed

Returns​

RenderPipeline


_updatePipelineAsync()​

_updatePipelineAsync(): Promise<RenderPipeline>

Defined in: modules/engine/src/model/gpu-vector-model.ts:1603

Creates or replaces the render pipeline through the backend's asynchronous compilation path.

Returns​

Promise<RenderPipeline>


destroy()​

destroy(): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:623

Returns​

void


draw()​

draw(renderPass, options?): boolean

Defined in: modules/engine/src/model/gpu-vector-model.ts:686

Issue one draw call.

Parameters​

renderPass​

RenderPass

render pass to draw into

options?​

ModelDrawOptions

Optional dynamic parameters restored after drawing, including on errors.

Returns​

boolean

true if the draw call was executed, false if resources were not ready.


drawBatches()​

drawBatches<Inputs>(renderPass, __namedParameters): boolean

Defined in: modules/engine/src/model/gpu-vector-model.ts:1067

Draws each aligned physical chunk without taking ownership of input vectors. Each batch uses a separate aligned slot for managed shader-input uniforms set by onBatch. Slots are reused on each call: submit previous draws before changing their values or growing the allocation. Explicit buffers remain caller-managed. Vector lengths and physical chunk boundaries must match.

Type Parameters​

Inputs​

Inputs extends GPUVectorModelInputs = GPUVectorModelInputs

Parameters​

renderPass​

RenderPass

__namedParameters​

GPUVectorModelDrawBatchesOptions<Inputs>

Returns​

boolean


getBindingDebugTable()​

getBindingDebugTable(): readonly ShaderBindingDebugRow[]

Defined in: modules/engine/src/model/gpu-vector-model.ts:662

Returns WGSL binding debug rows for the assembled shader. Returns an empty array for GLSL models.

Returns​

readonly ShaderBindingDebugRow[]


needsRedraw()​

needsRedraw(): string | false

Defined in: modules/engine/src/model/gpu-vector-model.ts:646

Query redraw status. Clears the status.

Returns​

string | false


predraw()​

predraw(commandEncoder): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:672

Updates uniforms and pipeline state before opening a render pass.

Parameters​

commandEncoder​

CommandEncoder

Encoder that should own any GPU uploads emitted during draw preparation.

Returns​

void


setAttributes()​

setAttributes(buffers, options?): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1390

Sets attributes (buffers)

Parameters​

buffers​

Record<string, ModelBuffer>

options?​
byteOffsets?​

Record<string, number>

Optional byte offsets, keyed by buffer name, where each buffer's vertex data starts. Buffers without an entry are bound at offset 0.

disableWarnings?​

boolean

Returns​

void

Note​

Overrides any attributes previously set with the same name


setAttributeVectors()​

setAttributeVectors(vectors, bufferLayouts?): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:861

Replaces supplemental vectors; instanced models default these inputs to instance step mode.

Parameters​

vectors​

GPUVectorModelAttributes

bufferLayouts?​

BufferLayout[]

Returns​

void


setBindings()​

setBindings(bindings): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1349

Sets bindings (textures, samplers, uniform buffers)

Parameters​

bindings​

Record<string, ModelBinding>

Returns​

void


setBufferLayout()​

setBufferLayout(bufferLayout): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1195

Updates the buffer layout.

Parameters​

bufferLayout​

BufferLayout[]

Returns​

void

Note​

Triggers a pipeline rebuild / pipeline cache fetch


setConstantAttributes()​

setConstantAttributes(attributes, options?): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1476

Sets constant attributes

Parameters​

attributes​

Record<string, TypedArray>

options?​
disableWarnings?​

boolean

Returns​

void

Note​

Overrides any attributes previously set with the same name Constant attributes are only supported in WebGL, not in WebGPU Any attribute that is disabled in the current vertex array object is read from the context's global constant value for that attribute location.


setDrawOffsets()​

setDrawOffsets(__namedParameters): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1306

Updates the first indexed/non-indexed draw offsets.

Parameters​

__namedParameters​
firstIndex​

number

firstVertex​

number

Returns​

void


setGeometry()​

setGeometry(geometry): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:820

Binds a GPU-only mesh. CPU geometry adaptation belongs in Model.

Parameters​

geometry​

GPUVectorGeometry | null

Returns​

void


setGeometryVectors()​

setGeometryVectors(vectors, bufferLayouts?): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:828

Replaces per-vertex mesh vectors while preserving supplemental attributes.

Parameters​

vectors​

GPUVectorModelAttributes

bufferLayouts?​

BufferLayout[]

Returns​

void


setGPUAttributes()​

setGPUAttributes(vectors, bufferLayouts): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:914

Binds typed columns using caller-resolved layouts, including packed groups.

Parameters​

vectors​

GPUVectorModelAttributes

bufferLayouts​

BufferLayout[]

Returns​

void


setGPUVectors()​

setGPUVectors(vectors, options?): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1027

Binds contiguous borrowed vectors; use drawBatches() for multi-chunk inputs.

Parameters​

vectors​

GPUVectorModelInputs

options?​
count?​

GPUVectorModelCount

Returns​

void


setIndexBuffer()​

setIndexBuffer(indexBuffer): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1366

Sets the index buffer

Parameters​

indexBuffer​

ModelBuffer | null

Returns​

void

Todo​

  • how to unset it if we change geometry?

setIndexCount()​

setIndexCount(indexCount): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1300

Updates the indexed draw count override.

Parameters​

indexCount​

number | undefined

Returns​

void


setIndexVector()​

setIndexVector(vector): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:919

Replaces the borrowed contiguous uint16/uint32 index vector.

Parameters​

vector​

GPUVectorModelInput | null

Returns​

void


setInstanceCount()​

setInstanceCount(instanceCount): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1279

Updates the instance count (used in draw calls)

Parameters​

instanceCount​

number

Returns​

void

Note​

Any attributes with stepMode=instance need to be at least this big


setNeedsRedraw()​

setNeedsRedraw(reason): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:657

Mark the model as needing a redraw

Parameters​

reason​

string

Returns​

void


setParameters()​

setParameters(parameters): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1262

Set GPU parameters.

Parameters​

parameters​

RenderPipelineParameters

Returns​

void

Note​

Can trigger a pipeline rebuild / pipeline cache fetch on WebGPU. On WebGL, parameters are applied at each draw call, so the pipeline is kept.


setShaderInputs()​

setShaderInputs(shaderInputs): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1313

Set the shader inputs

Parameters​

shaderInputs​

ShaderInputs

Returns​

void


setTopology()​

setTopology(topology): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1184

Updates the primitive topology ('triangle-list', 'triangle-strip' etc).

Parameters​

topology​

PrimitiveTopology

Returns​

void

Note​

Triggers a pipeline rebuild / pipeline cache fetch on WebGPU


setTransformFeedback()​

setTransformFeedback(transformFeedback): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1357

Updates optional transform feedback. WebGL only.

Parameters​

transformFeedback​

TransformFeedback | null

Returns​

void


setVertexCount()​

setVertexCount(vertexCount): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1293

Updates the vertex count (used in draw calls)

Parameters​

vertexCount​

number

Returns​

void

Note​

Any attributes with stepMode=vertex need to be at least this big


toString()​

toString(): string

Defined in: modules/engine/src/model/gpu-vector-model.ts:397

Returns​

string


updateShaderInputs()​

updateShaderInputs(commandEncoder?): void

Defined in: modules/engine/src/model/gpu-vector-model.ts:1334

Flushes current shader-input values into managed uniform buffers and resource bindings.

Parameters​

commandEncoder?​

CommandEncoder

Optional encoder used to order uniform uploads with subsequent draw commands.

Returns​

void


createAsync()​

static createAsync<ModelType, Props>(this, device, props): Promise<ModelType>

Defined in: modules/engine/src/model/gpu-vector-model.ts:218

Creates a model while allowing the backend to compile its render pipeline asynchronously.

Type Parameters​

ModelType​

ModelType extends GPUVectorModel

Props​

Props = GPUVectorModelProps

Parameters​

this​

(device, props) => ModelType

device​

Device

props​

Props

Returns​

Promise<ModelType>