Skip to main content

MeshModel

The MeshModel class represents a 3D model used in graphics rendering, offering various methods for creating, loading, and managing model data. It provides support for different model flags, such as optimizing indices, creating materials, and specifying buffer types. The class facilitates the setup of vertex and index buffers, meshlet buffers, and materials, with flexible configurations for geometry and material handling. It also supports the ability to draw the model in various ways, including instancing for efficient rendering. Additionally, the class offers tools for managing the memory usage of the model and interacting with the underlying device and pipeline for custom rendering operations.

#include <graphics/TellusimMeshModel.h>

Constructors

MeshModel()

Methods

Clear model.

void clear()

Check model.

bool isCreated() const

Model flags.

Flags getFlags() const
bool hasFlag(Flags flags) const
bool hasFlags(Flags flags) const

Load model.

bool load(const Device &device, const Pipeline &pipeline, const char *name, Flags flags = DefaultFlags, Async *async = nullptr)
bool load(const Device &device, const Pipeline &pipeline, Stream &stream, Flags flags = DefaultFlags, Async *async = nullptr)

Create model.

bool create(const Device &device, const Pipeline &pipeline, const char *name, Flags flags = DefaultFlags)
bool create(const Device &device, const Pipeline &pipeline, const Mesh &mesh, Flags flags = DefaultFlags)
bool create(const Device &device, const Pipeline &pipeline, const MeshGeometry &geometry, Flags flags = DefaultFlags)
bool create(const Device &device, const Pipeline &pipeline, Array<MeshGeometry> geometries, Flags flags = DefaultFlags)

Create buffer callbacks.

void setVertexBufferCallback(const CreateCallback &func)
void setIndexBufferCallback(const CreateCallback &func)
void setMeshBufferCallback(const CreateCallback &func)

Set model buffers.

void setBuffers(Command &command, uint32_t index = 0, const Pipeline *pipeline = nullptr) const

Draw model.

void draw(Command &command) const
void draw(Command &command, uint32_t geometry) const
void draw(Command &command, uint32_t geometry, uint32_t material) const

Draw instanced model.

void drawInstanced(Command &command, uint32_t geometry, uint32_t num_instances, uint32_t base_instance = 0) const
void drawInstanced(Command &command, uint32_t geometry, uint32_t material, uint32_t num_instances, uint32_t base_instance) const

Vertices buffer.

uint32_t getNumVertices() const
uint32_t getNumVertexBuffers() const
uint32_t getVertexBufferStride(uint32_t index) const
size_t getVertexBufferOffset(uint32_t index) const
Buffer getVertexBuffer() const

Indices buffer.

uint32_t getNumIndices() const
Format getIndexFormat() const
Buffer getIndexBuffer() const

Meshlets buffer.

uint32_t getNumMeshlets() const
Buffer getMeshletBuffer() const

Geometries.

uint32_t getNumGeometries() const
uint32_t getNumGeometryIndices(uint32_t geometry) const
uint32_t getNumGeometryVertices(uint32_t geometry) const
uint32_t getNumGeometryMeshlets(uint32_t geometry) const
uint32_t getGeometryBaseIndex(uint32_t geometry) const
uint32_t getGeometryBaseVertex(uint32_t geometry) const
uint32_t getGeometryBaseMeshlet(uint32_t geometry) const

Geometry materials.

uint32_t getNumMaterials(uint32_t geometry) const
uint32_t getNumMaterialIndices(uint32_t geometry, uint32_t material) const
uint32_t getNumMaterialVertices(uint32_t geometry, uint32_t material) const
uint32_t getNumMaterialMeshlets(uint32_t geometry, uint32_t material) const
uint32_t getMaterialBaseIndex(uint32_t geometry, uint32_t material) const
uint32_t getMaterialBaseVertex(uint32_t geometry, uint32_t material) const
uint32_t getMaterialBaseMeshlet(uint32_t geometry, uint32_t material) const

Memory usage.

size_t getMemory() const

Create vertex buffer.

virtual bool create_vertex_buffer(const Device &device, const void *src, size_t size, bool owner)
TypeNameDescription
voidsrcVertex data.
size_tsizeVertex data size.
boolownerIf true, the vertex data must be freed with the Allocator class.

Create index buffer.

virtual bool create_index_buffer(const Device &device, const void *src, size_t size, bool owner)
TypeNameDescription
voidsrcIndex data.
size_tsizeIndex data size.
boolownerIf true, the index data must be freed with the Allocator class.

Create meshlet buffer.

virtual bool create_meshlet_buffer(const Device &device, const void *src, size_t size, bool owner)
TypeNameDescription
voidsrcMeshlet data.
size_tsizeMeshlet data size.
boolownerIf true, the meshlet data must be freed with the Allocator class.

Types

using CreateCallback = Function<bool(const void *src, size_t size, bool owner)>

Enums

Flags

Model flags.

NameValueDescription
FlagNone0
FlagDirect(1 << 0)Direct creation.
FlagVerbose(1 << 1)Verbose creation.
FlagOptimize(1 << 2)Optimize indices.
FlagMaterials(1 << 3)Create materials.
FlagIndices10(1 << 4)Create 10-bit indices.
FlagIndices16(1 << 5)Create 16-bit indices.
FlagIndices32(1 << 6)Create 32-bit indices.
FlagMeshlet64x84(1 << 7)Create meshlets with 64 vertices and 84 triangles.
FlagMeshlet64x126(1 << 8)Create meshlets with 64 vertices and 126 triangles.
FlagMeshlet96x169(1 << 9)Create meshlets with 96 vertices and 169 triangles.
FlagMeshlet128x212(1 << 10)Create meshlets with 128 vertices and 212 triangles.
FlagBufferWrite(1 << 11)Create write buffers.
FlagBufferSource(1 << 12)Create source buffers.
FlagBufferStorage(1 << 13)Create storage buffers.
FlagBufferTracing(1 << 14)Create tracing buffers.
FlagBufferAddress(1 << 15)Create address buffers.
FlagBufferTexel(1 << 16)Create texel buffers.
FlagMeshlets(FlagMeshlet64x84 | FlagMeshlet64x126 | FlagMeshlet96x169 | FlagMeshlet128x212)
DefaultFlags(FlagVerbose | FlagMaterials)
NumFlags17

Structs

Meshlet

.

Variables

TypeNameDescription
uint32_tnum_primitivesNumber of primitives.
uint32_tnum_verticesNumber of vertices.
uint32_tbase_indexBase meshlet index.
uint32_tbase_vertexBase meshlet vertex.
float32_t[4]bound_sphereMeshlet bound sphere.
float32_t[4]normal_angleMeshlet normal angle.