62 auto* vertex_data = mesh_ref->get_system_vb();
63 auto* index_data = mesh_ref->get_system_ib();
64 auto vertex_count = mesh_ref->get_vertex_count();
65 auto face_count = mesh_ref->get_face_count();
66 const auto& vertex_format = mesh_ref->get_vertex_format();
68 if(!vertex_data || !index_data || vertex_count == 0 || face_count == 0)
74 auto position_offset = vertex_format.getOffset(bgfx::Attrib::Position);
76 if(position_offset == UINT16_MAX)
83 std::vector<DdVertex> vertices;
84 vertices.reserve(vertex_count);
86 for(uint32_t i = 0; i < vertex_count; ++i)
88 std::array<float, 4> pos;
89 gfx::vertex_unpack(pos.data(), gfx::attribute::Position, vertex_format, vertex_data, i);
95 vertices.push_back(
v);
108 const auto& submeshes = mesh_ref->get_submeshes();
109 const auto node_transforms = mesh_ref->get_submesh_node_transforms();
111 for(
size_t s = 0; s < submeshes.size(); ++s)
113 const auto* submesh = submeshes[s];
114 if(!submesh || submesh->face_start < 0 || submesh->face_count == 0)
119 const uint32_t face_begin =
static_cast<uint32_t
>(submesh->face_start);
120 if(face_begin >= face_count)
124 const uint32_t face_render_count = std::min(submesh->face_count, face_count - face_begin);
125 const uint32_t submesh_index_count = face_render_count * 3;
126 const uint32_t* submesh_indices = index_data +
static_cast<size_t>(face_begin) * 3;
140 if(s < node_transforms.size())
142 local_transform = node_transforms[s];
146 dde.
draw(geom_handle);
GeometryHandle ddCreateGeometry(uint32_t _numVertices, const DdVertex *_vertices, uint32_t _numIndices, const void *_indices, bool _index32)