MeshData class Geometry

An isolate-transferable snapshot of a mesh's vertex and index data.

MeshData separates the CPU work of building a mesh (assembling vertex arrays and generating normals) from the GPU upload. Its construction is pure and touches no GPU resources, so it can run on a background isolate; the result is sent back and turned into a live mesh on the render isolate. This keeps heavy meshing, such as remeshing a voxel chunk, off the render isolate.

It is also the interchange type for reading geometry back and deriving new geometry from it: Geometry.extractMeshData produces one from a loaded mesh, and the pure derivation methods (unweld, extractEdges, merge) consume and produce them, so a whole derivation chain can run off the render isolate.

Recipe (using compute from package:flutter/foundation.dart):

// Top-level or static, runs on the background isolate.
MeshData buildChunk(ChunkInput input) {
  final positions = ...; // your generator
  final indices = ...;
  return MeshData.build(positions: positions, indices: indices);
}

// On the render isolate:
final data = await compute(buildChunk, input);
final geometry = MeshGeometry.fromMeshData(data);
// or, to update an existing updatable mesh in place:
existing.applyMeshData(data);

Constructors

MeshData({required Float32List positions, required int vertexCount, Float32List? normals, Float32List? texCoords, Float32List? texCoords1, Float32List? colors, Float32List? tangents, List<int>? indices, PrimitiveType primitiveType = gpu.PrimitiveType.triangle, Map<String, MeshAttributeData> customAttributes = const {}})
Wraps already-prepared vertex arrays without generating anything.
MeshData.build({required Float32List positions, Float32List? normals, Float32List? texCoords, Float32List? texCoords1, Float32List? colors, Float32List? tangents, List<int>? indices, PrimitiveType primitiveType = gpu.PrimitiveType.triangle, Map<String, MeshAttributeData> customAttributes = const {}})
Builds a snapshot from vertex attribute arrays, generating area-weighted normals from the faces when normals is absent and primitiveType is a triangle list. The normal generation is the work worth doing off the render isolate. The attribute-array contract matches MeshGeometry.fromArrays.
factory

Properties

colors → Float32List?
Vertex colors (four floats each), or null to default to opaque white.
final
customAttributes → Map<String, MeshAttributeData>
Named custom per-vertex attribute streams, forwarded to Geometry.setCustomAttribute on upload.
final
hashCode → int
The hash code for this object.
no setterinherited
indices → List<int>?
Triangle (or line/point) indices, or null for a non-indexed mesh.
final
normals → Float32List?
Vertex normals (three floats each), or null to let the upload generate or default them.
final
positions → Float32List
Vertex positions, three floats each.
final
primitiveType → PrimitiveType
How the vertices assemble into primitives when drawn.
final
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
tangents → Float32List?
Vertex tangents (four floats each), or null to derive tangent space.
final
texCoords → Float32List?
Texture coordinates (two floats each), or null to default to (0, 0).
final
texCoords1 → Float32List?
Secondary texture coordinates, or null to default to (0, 0).
final
triangleCount → int
The number of triangles (indexed or not). Zero for non-triangle primitive types.
no setter
triangles → Iterable<MeshTriangle>
Iterates the mesh's triangles with their corner indices and positions.
no setter
vertexCount → int
The number of vertices, equal to positions.length ~/ 3.
final

Methods

extractEdges({double? creaseAngleDegrees}) → LineSegmentData
The mesh's unique undirected edges as disconnected line segments.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toConvexHullShape() → ConvexHullShape
A collision convex hull enclosing this mesh's vertices.
toString() → String
A string representation of this object.
inherited
toTriMeshShape() → TriMeshShape
A collision triangle mesh over this mesh's triangles.
transformed(Matrix4 transform) → MeshData
This mesh placed by transform.
unweld({Set<UnweldAttribute> attributes = const {}}) → MeshData
A flat-shaded triangle soup derived from this mesh.

Operators

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

Static Methods

merge(List<MeshData> parts) → MeshData
Concatenates parts into one snapshot, rebasing indices.