80static_assert(
sizeof(
Header) == 24,
"PXM2 header size mismatch");
85static_assert(
sizeof(
Vec3) == 6,
"PXM2 vector size mismatch");
97static_assert(
sizeof(
Triangle) == 20,
"PXM2 triangle size mismatch");
110 auto header =
reinterpret_cast<const Header*
>(blob);
111 if (header->magic[0] !=
'P' || header->magic[1] !=
'X' || header->magic[2] !=
'M' || header->magic[3] !=
'2') {
115 m_vertices =
reinterpret_cast<const Vec3*
>(blob + header->vertexOffset);
116 m_normals =
reinterpret_cast<const Vec3*
>(blob + header->normalOffset);
117 m_triangles =
reinterpret_cast<const Triangle*
>(blob + header->triangleOffset);
130 const Header* m_header =
nullptr;
131 const Vec3* m_vertices =
nullptr;
132 const Vec3* m_normals =
nullptr;
133 const Triangle* m_triangles =
nullptr;
Points into a PXM2 blob without copying it, so the blob has to outlive it. For an asset linked in by ...
Definition psxm.hh:103
unsigned normalCount() const
Definition psxm.hh:122
bool parse(const uint8_t *blob)
Accepts the blob if it carries the PXM2 magic. The blob has to be four byte aligned.
Definition psxm.hh:109
unsigned triangleCount() const
Definition psxm.hh:123
const Vec3 * vertices() const
Definition psxm.hh:125
const Triangle * triangles() const
Definition psxm.hh:127
unsigned vertexCount() const
Definition psxm.hh:121
const Vec3 * normals() const
Definition psxm.hh:126
UV uv[3]
Definition psxm.hh:94
uint16_t vertices[3]
Definition psxm.hh:92
uint16_t normals[3]
Definition psxm.hh:93
uint16_t padding
Zero. Keeps the record a multiple of four bytes.
Definition psxm.hh:95
uint8_t v
Definition psxm.hh:88
uint8_t u
Definition psxm.hh:88
int16_t x
Definition psxm.hh:83
int16_t y
Definition psxm.hh:83
int16_t z
Definition psxm.hh:83