From d9e48ec7a5307baf85696a318d9c9e3b2635658b Mon Sep 17 00:00:00 2001 From: Quim Muntal Date: Mon, 1 Mar 2021 09:59:39 +0100 Subject: [PATCH] simplify mesh indices retrieval --- include/c_api.h | 14 +++----------- src/c_api_test.cc | 2 +- src/mesh.cc | 25 +++++++------------------ 3 files changed, 11 insertions(+), 30 deletions(-) diff --git a/include/c_api.h b/include/c_api.h index 4997856..cdfc026 100644 --- a/include/c_api.h +++ b/include/c_api.h @@ -143,21 +143,13 @@ EXPORT_API void dracoMeshRelease(draco_mesh *mesh); EXPORT_API uint32_t dracoMeshNumFaces(const draco_mesh *mesh); -// Queries an array of 3*face_count elements containing the triangle indices. -// out_values must be allocated to contain at least 3*face_count uint16_t elements. -// out_size must be exactly 3*face_count*sizeof(uint16_t), else out_values -// won't be filled and returns false. -EXPORT_API bool dracoMeshGetTrianglesUint16(const draco_mesh *mesh, - const size_t out_size, - uint16_t *out_values); - // Queries an array of 3*face_count elements containing the triangle indices. // out_values must be allocated to contain at least 3*face_count uint32_t elements. // out_size must be exactly 3*face_count*sizeof(uint32_t), else out_values // won't be filled and returns false. -EXPORT_API bool dracoMeshGetTrianglesUint32(const draco_mesh *mesh, - const size_t out_size, - uint32_t *out_values); +EXPORT_API bool dracoMeshGetIndices(const draco_mesh *mesh, + const size_t out_size, + uint32_t *out_values); // draco::Decoder diff --git a/src/c_api_test.cc b/src/c_api_test.cc index f5c4c41..7857aac 100644 --- a/src/c_api_test.cc +++ b/src/c_api_test.cc @@ -46,7 +46,7 @@ TEST(DracoCAPITest, TestDecode) { auto indices_size = 3 * num_faces * sizeof(uint32_t); uint32_t *indices = (uint32_t *)malloc(indices_size); - ASSERT_TRUE(dracoMeshGetTrianglesUint32(mesh, indices_size, indices)); + ASSERT_TRUE(dracoMeshGetIndices(mesh, indices_size, indices)); free(indices); auto pa1 = dracoPointCloudGetAttribute(mesh, 0); diff --git a/src/mesh.cc b/src/mesh.cc index 3215106..2bb0035 100644 --- a/src/mesh.cc +++ b/src/mesh.cc @@ -13,35 +13,24 @@ uint32_t dracoMeshNumFaces(const draco_mesh *mesh) { return reinterpret_cast(mesh)->num_faces(); } -template bool GetTrianglesArray(const draco::Mesh *m, const size_t out_size, - T *out_values) { + uint32_t *out_values) { const uint32_t num_faces = m->num_faces(); - if (num_faces * 3 * sizeof(T) != out_size) { + if (num_faces * 3 * sizeof(uint32_t) != out_size) { return false; } for (uint32_t face_id = 0; face_id < num_faces; ++face_id) { const draco::Mesh::Face &face = m->face(draco::FaceIndex(face_id)); - out_values[face_id * 3 + 0] = static_cast(face[0].value()); - out_values[face_id * 3 + 1] = static_cast(face[1].value()); - out_values[face_id * 3 + 2] = static_cast(face[2].value()); + out_values[face_id * 3 + 0] = face[0].value(); + out_values[face_id * 3 + 1] = face[1].value(); + out_values[face_id * 3 + 2] = face[2].value(); } return true; } -bool dracoMeshGetTrianglesUint16(const draco_mesh *mesh, const size_t out_size, - uint16_t *out_values) { - auto m = reinterpret_cast(mesh); - if (m->num_points() > std::numeric_limits::max()) { - return false; - } - - return GetTrianglesArray(m, out_size, out_values); -} - -bool dracoMeshGetTrianglesUint32(const draco_mesh *mesh, const size_t out_size, - uint32_t *out_values) { +bool dracoMeshGetIndices(const draco_mesh *mesh, const size_t out_size, + uint32_t *out_values) { auto m = reinterpret_cast(mesh); if (m->num_points() > std::numeric_limits::max()) { return false;