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);
}
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(
gmio_stl_mesh_creator_t* creator,
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 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;
uint32_t buffer_offset = 0;
uint32_t i_facet = 0;
if (creator == NULL || creator->func_add_triangle == NULL)
if (func_add_triangle == NULL)
return;
for (i_facet = 0; i_facet < facet_count; ++i_facet) {
/* Decode data */
read_triangle_memcpy(buffer + buffer_offset, &triangle);
buffer_offset += GMIO_STLB_TRIANGLE_RAWSIZE;
if (rparams->func_fix_endian != NULL)
rparams->func_fix_endian(&triangle);
if (func_fix_endian != NULL)
func_fix_endian(&triangle);
/* Declare triangle */
creator->func_add_triangle(
creator->cookie, i_facet_offset + i_facet, &triangle);
func_add_triangle(cookie, i_facet_offset + i_facet, &triangle);
}
}