MeshGeometry class Geometry

A triangle mesh built at runtime from vertex attribute arrays.

MeshGeometry is the general-purpose Geometry for procedurally generated content. Build one directly from attribute arrays with MeshGeometry.fromArrays, or assemble it incrementally with a GeometryBuilder.

Callers supply attributes as independent typed arrays (positions, normals, texture coordinates, colors) and never pack vertex bytes by hand; the arrays are interleaved into the engine vertex layout internally.

Pass GeometryStorage.updatable as the storage mode to create a geometry that can be mutated in place. updatePositions, updateNormals, updateTexCoords, and updateColors replace one attribute when the vertex count is unchanged; rebuild replaces everything and reallocates only when the data outgrows the spare capacity.

Inheritance
Implementers

Constructors

MeshGeometry.fromArrays({required Float32List positions, Float32List? normals, Float32List? texCoords, Float32List? colors, List<int>? indices, PrimitiveType primitiveType = gpu.PrimitiveType.triangle, Aabb3? bounds, GeometryStorage storage = GeometryStorage.fixed})
Builds a mesh from structure-of-arrays vertex attributes.
MeshGeometry.fromMeshData(MeshData data, {GeometryStorage storage = GeometryStorage.fixed})
Uploads a mesh from a MeshData snapshot built off the render isolate.
factory

Properties

depthOnlyVertex → ({VertexLayoutDescriptor layout, Shader shader})?
The vertex shader and layout the depth-style passes (the directional shadow map, the camera depth prepass, and the object-selection mask) should use for this geometry, or null to reuse vertexShader with instancedVertexLayout.
no setterinherited
hashCode int
The hash code for this object.
no setterinherited
instancedVertexLayout → VertexLayoutDescriptor?
The explicit pipeline vertex layout this geometry's vertex shader expects, or null for the shader bundle's default interleaved layout.
no setterinherited
isReadable bool Geometry
Whether this geometry retains CPU-side vertex data, making extractMeshData available.
no setterinherited
isUpdatable bool
Whether this geometry can be updated in place.
no setter
localBoundingSphere → Sphere?
Local-space bounding sphere paired with localBounds. Same nullability semantics.
no setterinherited
localBounds → Aabb3?
Local-space axis-aligned bounding box of this geometry's vertex positions, or null if bounds are unknown. Computed by uploadVertexData for procedural geometry, populated from baked scene-package bounds for imported geometry, and (for the advanced setVertices path where the caller manages its own GPU buffer) left null unless the caller assigns it via setLocalBounds.
no setterinherited
packedData → ({Uint8List? indexBytes, bool indices32Bit, Uint8List vertexBytes})
The packed interleaved vertex bytes (and packed index bytes with their width), in the engine's interleaved unskinned layout. Interleaved lazily from the per-attribute CPU streams on first access. The scene serializer emits the de-interleaved soaData instead; this stays as a convenience for callers wanting the interleaved form.
no setter
primitiveType ↔ PrimitiveType
How the vertex/index data is assembled into primitives when drawn.
getter/setter pairinherited
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
storage GeometryStorage
How this geometry's GPU buffers are managed; see GeometryStorage.
final
vertexCount int
The number of vertices currently drawn.
no setter
vertexShader Shader
The vertex shader used when rendering this geometry.
no setterinherited

Methods

applyMeshData(MeshData data) → void
Replaces this updatable geometry's data from a MeshData snapshot.
bind(RenderPass pass, TransientWriter transientsBuffer, Matrix4 modelTransform, Matrix4 cameraTransform, Vector3 cameraPosition, {Shader? shaderOverride}) → void
Binds vertex/index buffers and per-frame uniforms onto pass in preparation for a draw call.
inherited
draw(RenderPass pass, {int instanceCount = 1}) → void
Emits this geometry's draw call after bind has prepared the render pass.
inherited
extractMeshData() MeshData Geometry
Copies this geometry's retained CPU vertex/index data out as an isolate-transferable MeshData snapshot.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
rebuild({required Float32List positions, Float32List? normals, Float32List? texCoords, Float32List? colors, List<int>? indices}) → void
Replaces all of this geometry's data, allowing the vertex and index counts to change.
setCustomAttribute(String name, Float32List data, {required int components}) → void Geometry
Attaches a custom per-vertex attribute stream named name, matching a material's attributes entry (and the generated shader's in <name>).
inherited
setIndices(BufferView indices, IndexType indexType) → void
Binds an already-uploaded index buffer view, with element width determined by indexType.
inherited
setJointsTexture(Texture? texture, int width) → void
Hook for skinned geometries to receive the joints texture computed by Skin.getJointsTexture.
inherited
setLocalBounds(Aabb3? aabb, Sphere? sphere) → void
Override the bounds. Useful for callers driving setVertices from a caller-managed gpu.DeviceBuffer who want to participate in bounds-driven scene queries (e.g. frustum culling).
inherited
setVertexShader(Shader shader) → void
Assigns the vertex shader used when this geometry is drawn.
inherited
setVertexShaderName(String name) → void
Assigns the vertex shader by name from baseShaderLibrary.
inherited
setVertices(BufferView vertices, int vertexCount) → void
Binds an already-uploaded vertex buffer view as this geometry's vertex source.
inherited
toString() String
A string representation of this object.
inherited
updateColors(Float32List colors, {int? dirtyStart, int? dirtyCount}) → void
Replaces every vertex color, keeping the vertex count unchanged.
updateNormals(Float32List normals, {int? dirtyStart, int? dirtyCount}) → void
Replaces every vertex normal, keeping the vertex count unchanged.
updatePositions(Float32List positions, {int? dirtyStart, int? dirtyCount}) → void
Replaces every vertex position, keeping the vertex count unchanged.
updateTexCoords(Float32List texCoords, {int? dirtyStart, int? dirtyCount}) → void
Replaces every texture coordinate, keeping the vertex count unchanged.
uploadVertexData(ByteData vertices, int vertexCount, ByteData? indices, {IndexType indexType = gpu.IndexType.int16}) → void
Allocates a gpu.DeviceBuffer and uploads vertices (and optional indices) into it in one step.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited