gmio_stl: µ optimizations in gmio_stlb_read_facets()

This commit is contained in:
Hugues Delorme 2015-10-06 11:30:36 +02:00
parent 0e7e0f9ff9
commit f5c93e70fe

View File

@ -37,6 +37,11 @@ GMIO_INLINE void read_triangle_memcpy(
memcpy(triangle, buffer, GMIO_STLB_TRIANGLE_RAWSIZE); memcpy(triangle, buffer, GMIO_STLB_TRIANGLE_RAWSIZE);
} }
typedef void (*gmio_stl_func_fix_endian_t)(gmio_stl_triangle_t*);
typedef void (*gmio_stl_func_add_triangle_t)(
void*, uint32_t, const gmio_stl_triangle_t*);
static void gmio_stlb_read_facets( static void gmio_stlb_read_facets(
gmio_stl_mesh_creator_t* creator, gmio_stl_mesh_creator_t* creator,
const uint8_t* buffer, const uint8_t* buffer,
@ -44,24 +49,25 @@ static void gmio_stlb_read_facets(
{ {
const uint32_t facet_count = rparams->facet_count; const uint32_t facet_count = rparams->facet_count;
const uint32_t i_facet_offset = rparams->i_facet_offset; const uint32_t i_facet_offset = rparams->i_facet_offset;
const gmio_stl_func_fix_endian_t func_fix_endian = rparams->func_fix_endian;
const gmio_stl_func_add_triangle_t func_add_triangle =
creator != NULL ? creator->func_add_triangle : NULL;
void* cookie = creator->cookie;
gmio_stl_triangle_t triangle; gmio_stl_triangle_t triangle;
uint32_t buffer_offset = 0; uint32_t buffer_offset = 0;
uint32_t i_facet = 0; uint32_t i_facet = 0;
if (creator == NULL || creator->func_add_triangle == NULL) if (func_add_triangle == NULL)
return; return;
for (i_facet = 0; i_facet < facet_count; ++i_facet) { for (i_facet = 0; i_facet < facet_count; ++i_facet) {
/* Decode data */
read_triangle_memcpy(buffer + buffer_offset, &triangle); read_triangle_memcpy(buffer + buffer_offset, &triangle);
buffer_offset += GMIO_STLB_TRIANGLE_RAWSIZE; buffer_offset += GMIO_STLB_TRIANGLE_RAWSIZE;
if (rparams->func_fix_endian != NULL) if (func_fix_endian != NULL)
rparams->func_fix_endian(&triangle); func_fix_endian(&triangle);
/* Declare triangle */ func_add_triangle(cookie, i_facet_offset + i_facet, &triangle);
creator->func_add_triangle(
creator->cookie, i_facet_offset + i_facet, &triangle);
} }
} }
@ -81,7 +87,7 @@ int gmio_stlb_read(
gmio_stlb_readwrite_helper_t rparams = {0}; gmio_stlb_readwrite_helper_t rparams = {0};
gmio_stlb_header_t header; gmio_stlb_header_t header;
uint32_t total_facet_count = 0; /* Facet count, as declared in the stream */ uint32_t total_facet_count = 0; /* Facet count, as declared in the stream */
int error = GMIO_ERROR_OK; /* Helper to store function result error code */ int error = GMIO_ERROR_OK; /* Helper to store function result error code */
/* Check validity of input parameters */ /* Check validity of input parameters */
if (!gmio_stlb_check_params(&error, trsf, byte_order)) if (!gmio_stlb_check_params(&error, trsf, byte_order))