Skip to content

Commit

Permalink
Optimize m3d mesh creation (#3363)
Browse files Browse the repository at this point in the history
* Optimize m3d mesh creation

* Avoid qsort() in rmodels.c

* Revert "Avoid qsort() in rmodels.c"

This reverts commit dc1bd55.

* Add comment
  • Loading branch information
DaveH355 committed Oct 7, 2023
1 parent bc15c19 commit da5407b
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/rmodels.c
Original file line number Diff line number Diff line change
Expand Up @@ -5567,6 +5567,15 @@ static Model LoadVOX(const char *fileName)
unsigned char *m3d_loaderhook(char *fn, unsigned int *len) { return LoadFileData((const char *)fn, (int *)len); }
void m3d_freehook(void *data) { UnloadFileData((unsigned char *)data); }

// Comparison function for qsort
static int m3d_compare_faces(const void *a, const void *b)
{
m3df_t *fa = (m3df_t *)a;
m3df_t *fb = (m3df_t *)b;

return (fa->materialid - fb->materialid);
}

// Load M3D mesh data
static Model LoadM3D(const char *fileName)
{
Expand Down Expand Up @@ -5614,6 +5623,9 @@ static Model LoadM3D(const char *fileName)
// We always need a default material, so we add +1
model.materialCount++;

// failsafe, model should already have faces grouped by material
qsort(m3d->face, m3d->numface, sizeof(m3df_t), m3d_compare_faces);

model.meshes = (Mesh *)RL_CALLOC(model.meshCount, sizeof(Mesh));
model.meshMaterial = (int *)RL_CALLOC(model.meshCount, sizeof(int));
model.materials = (Material *)RL_CALLOC(model.materialCount + 1, sizeof(Material));
Expand Down

0 comments on commit da5407b

Please sign in to comment.