GPU data texture mapping each primitive to its owning mesh for a given render pass.

PrimitiveMeshIndexTexture is a GPU-resident table used by the renderer to efficiently determine, for each primitive (triangle, line, or point), which mesh it belongs to and its offset within that mesh.

  • Each item stores two uint32 values: meshIndex and offset.
  • Items are grouped into "portions", each associated with a mesh and a render pass (e.g., OPAQUE, XRAYED).
  • The texture maintains a mapping of render pass IDs to primitive ranges, enabling fast per-pass rendering.

Hierarchy (View Summary)

Properties

buffer: any

CPU-side backing buffer used to populate this texture.

The concrete type depends on the implementation (e.g., Uint32Array, Float32Array, or a view over an ArrayBuffer). This buffer is uploaded to the GPU when updated.

bufferClass: any

The ArrayBufferView class used for the CPU-side buffer.

bytesPerTexel: number

Size in bytes of a single texel in the data texture.

debugging: boolean = true

Enables internal event emission for this data texture.

description: string = ""

Human-readable description of the data stored in this texture.

Intended for debugging UIs and diagnostics (e.g., displayed above inspectors). Subclasses or owners should populate this with a concise explanation of the layout and semantic meaning (e.g., “mesh matrices (Mat4, row-major), indexed by meshId”).

elementsPerItem: number

Number of individual elements (e.g., floats, uint32s) stored per logical item in this data texture.

elementsPerTexel: number

Number of individual elements (e.g., floats, uint32s) stored per texel in the data texture.

format: number

Texture format (e.g., gl.RGBA, gl.RGBA_INTEGER).

gl: WebGL2RenderingContext

The WebGL2 rendering context.

height: number

Texture height in texels.

internalFormat: number

Texture internal format (e.g., gl.RGBA8, gl.RGBA32UI, gl.RGBA32F).

itemSizeInBytes: number

Size in bytes of a single logical item stored in the data texture.

lastUploadTimeMS: number = 0

Duration (in milliseconds) of the last upload to GPU.

This value is 0 until the first upload occurs.

maxItems: number

Maximum number of logical items that can be stored in this texture.

The value of numItems never exceeds this limit.

onUpdated: EventEmitter<DataTexture, undefined> = ...

Emitted when the CPU-side buffer for this texture has changed and been uploaded to the GPU.

This event is intended for debugging tools and monitoring UIs; it is only emitted when debugging is enabled.

passRanges: Map<number, PrimRange> = ...
texelsPerItem: number

Number of texels occupied by a single logical item in the data texture.

texture: WebGLTexture

The underlying WebGL texture object.

This is the GPU resource that is bound and sampled/loaded by shaders.

type: number

Texture data type (e.g., gl.UNSIGNED_BYTE, gl.UNSIGNED_INT, gl.FLOAT).

width: number

Texture width in texels.

itemSizeInBytes: 8

Accessors

Methods

  • Gets the meshIndex and offset for a primitive index.

    The offset is the index of the primitive within its mesh. For example, for a triangle mesh, the offset will be 0 for the first triangle, 1 for the second triangle, and so on. This allows the vertex shader to determine which vertices to use when rendering the primitive.

    Parameters

    • primIndex: number

      Primitive index.

    Returns { meshIndex: number; offset: number }

  • Uploads current CPU buffer if dirty; rebuilds runs when necessary.

    Internal algorithm:

    • If no upload is needed, returns false.
    • If no items are allocated, clears buffer and returns false.
    • Otherwise, rebuilds runs and buffer:
      • Groups portions by renderPass, preserving insertion order.
      • Packs contiguous runs per renderPass, updating offsets.
      • Updates passRanges for each renderPass.
      • Uploads buffer to GPU.
      • Updates numDrawablePrims.
    • Notifies update and resets needUpload.

    Returns boolean

    True if any uploads occurred, false otherwise.