|
|
@ -5614,19 +5614,26 @@ static Model LoadM3D(const char *fileName) |
|
|
|
// We always need a default material, so we add +1 |
|
|
|
model.materialCount++; |
|
|
|
|
|
|
|
// WARNING: Sorting is not needed, valid M3D model files should already be sorted |
|
|
|
// faces should already by grouped by material |
|
|
|
// Just keeping the sorting function for reference (Check PR #3363) |
|
|
|
/* |
|
|
|
static int m3d_compare_faces(const void *a, const void *b) |
|
|
|
// Faces must be in non-decreasing materialid order |
|
|
|
// Verify that quickly, sorting them otherwise. |
|
|
|
for (i = 1; i < m3d->numface; i++) |
|
|
|
{ |
|
|
|
m3df_t *fa = (m3df_t *)a; |
|
|
|
m3df_t *fb = (m3df_t *)b; |
|
|
|
return (fa->materialid - fb->materialid); |
|
|
|
if ( m3d->face[i-1].materialid <= m3d->face[i].materialid ) |
|
|
|
continue; |
|
|
|
|
|
|
|
// face[i-1] > face[i]. slide face[i] lower. |
|
|
|
m3df_t slider = m3d->face[i]; |
|
|
|
j = i-1; |
|
|
|
|
|
|
|
do |
|
|
|
{ // face[j] > slider, face[j+1] is svailable vacant gap. |
|
|
|
m3d->face[j+1] = m3d->face[j]; |
|
|
|
j = j-1; |
|
|
|
} |
|
|
|
while (j >= 0 && m3d->face[j].materialid > slider.materialid); |
|
|
|
|
|
|
|
m3d->face[j+1] = slider; |
|
|
|
} |
|
|
|
|
|
|
|
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)); |
|
|
|