18 uint32_t index_start {};
19 uint32_t index_count {};
20 uint32_t vertex_offset {};
24 bool diffuse_embedded {};
32 [[nodiscard]]
Region to_region()
const;
61 const void* vertex_ptr =
nullptr;
62 size_t vertex_bytes = 0;
64 const uint32_t* index_ptr =
nullptr;
65 uint32_t index_count = 0;
84 return static_cast<uint32_t
>(vertex_bytes / layout.
stride_bytes);
92 return index_count / 3;
100 return vertex_ptr !=
nullptr && vertex_bytes > 0
101 && index_ptr !=
nullptr && index_count > 0
110 return submeshes.has_value() && !submeshes->regions.empty();
116 [[nodiscard]] std::span<const uint32_t>
indices() const noexcept
118 return { index_ptr, index_count };
124 [[nodiscard]] std::span<const std::byte>
vertices() const noexcept
126 return {
static_cast<const std::byte*
>(vertex_ptr), vertex_bytes };
147[[nodiscard]] MAYAFLUX_API std::optional<MeshAccess>
as_mesh_access(
150 const VertexLayout& layout,
151 std::optional<RegionGroup> submeshes = std::nullopt);
std::optional< MeshAccess > as_mesh_access(const DataVariant &vertex_variant, const DataVariant &index_variant, const VertexLayout &layout, std::optional< RegionGroup > submeshes)
Construct a MeshAccess from two DataVariant instances.
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.
std::optional< RegionGroup > submeshes
std::span< const std::byte > vertices() const noexcept
Span over the raw vertex bytes.
bool is_valid() const noexcept
True when both vertex and index data are non-empty.
uint32_t vertex_count() const noexcept
Number of vertices derived from vertex_bytes and layout stride.
std::span< const uint32_t > indices() const noexcept
Span over the raw index array.
uint32_t face_count() const noexcept
Number of triangles (index_count / 3).
bool has_submeshes() const noexcept
True when submesh region data is present.
Non-owning read view over a pair of DataVariant streams representing interleaved vertex bytes and a f...
std::string material_name
Byte-range descriptor for one submesh within the shared index buffer.
Represents a point or span in N-dimensional space.
uint32_t stride_bytes
Total bytes per vertex (stride in Vulkan terms) e.g., 3 floats (position) + 3 floats (normal) = 24 by...
Complete description of vertex data layout in a buffer.