ソースを参照

Avoid qsort() in rmodels.c

pull/3363/head
DaveH355 1年前
committed by GitHub
コミット
dc1bd559fd
この署名に対応する既知のキーがデータベースに存在しません GPGキーID: 4AEE18F83AFDEB23
1個のファイルの変更13行の追加11行の削除
  1. +13
    -11
      src/rmodels.c

+ 13
- 11
src/rmodels.c ファイルの表示

@ -5567,15 +5567,6 @@ 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)
{
@ -5623,8 +5614,19 @@ static Model LoadM3D(const char *fileName)
// We always need a default material, so we add +1
model.materialCount++;
// Sort faces by material.
qsort(m3d->face, m3d->numface, sizeof(m3df_t), m3d_compare_faces);
// Sort faces by material (insertion)
for (i = 1; i < m3d->numface; i++)
{
m3df_t key = m3d->face[i];
j = i - 1;
while (j >= 0 && m3d->face[j].materialid > key.materialid)
{
m3d->face[j+1] = m3d->face[j];
j = j - 1;
}
m3d->face[j+1] = key;
}
model.meshes = (Mesh *)RL_CALLOC(model.meshCount, sizeof(Mesh));
model.meshMaterial = (int *)RL_CALLOC(model.meshCount, sizeof(int));

読み込み中…
キャンセル
保存