瀏覽代碼

ADDED: UnloadModelKeepMeshes() #1441

pull/1448/head
Ray 4 年之前
父節點
當前提交
60928ec82c
共有 2 個檔案被更改,包括 43 行新增7 行删除
  1. +41
    -6
      src/models.c
  2. +2
    -1
      src/raylib.h

+ 41
- 6
src/models.c 查看文件

@ -782,16 +782,50 @@ Model LoadModelFromMesh(Mesh mesh)
return model;
}
// Unload model from memory (RAM and/or VRAM)
// Unload model (meshes/materials) from memory (RAM and/or VRAM)
// NOTE: This function takes care of all model elements, for a detailed control
// over them, use UnloadMesh() and UnloadMaterial()
void UnloadModel(Model model)
{
// Unload meshes
for (int i = 0; i < model.meshCount; i++) UnloadMesh(model.meshes[i]);
// As the user could be sharing shaders and textures between models,
// we don't unload the material but just free it's maps, the user
// is responsible for freeing models shaders and textures
for (int i = 0; i < model.materialCount; i++) RL_FREE(model.materials[i].maps);
// Unload materials maps and params
// NOTE: As the user could be sharing shaders and textures between models,
// we don't unload the material but just free it's maps and params,
// the user is responsible for freeing models shaders and textures
for (int i = 0; i < model.materialCount; i++)
{
RL_FREE(model.materials[i].maps);
RL_FREE(model.materials[i].params);
}
// Unload arrays
RL_FREE(model.meshes);
RL_FREE(model.materials);
RL_FREE(model.meshMaterial);
// Unload animation data
RL_FREE(model.bones);
RL_FREE(model.bindPose);
TRACELOG(LOG_INFO, "MODEL: Unloaded model (and meshes) from RAM and VRAM");
}
// Unload model (but not meshes) from memory (RAM and/or VRAM)
void UnloadModelKeepMeshes(Model model)
{
// Unload materials maps and params
// NOTE: As the user could be sharing shaders and textures between models,
// we don't unload the material but just free it's maps and params,
// the user is responsible for freeing models shaders and textures
for (int i = 0; i < model.materialCount; i++)
{
RL_FREE(model.materials[i].maps);
RL_FREE(model.materials[i].params);
}
// Unload arrays
RL_FREE(model.meshes);
RL_FREE(model.materials);
RL_FREE(model.meshMaterial);
@ -800,7 +834,7 @@ void UnloadModel(Model model)
RL_FREE(model.bones);
RL_FREE(model.bindPose);
TRACELOG(LOG_INFO, "MODEL: Unloaded model from RAM and VRAM");
TRACELOG(LOG_INFO, "MODEL: Unloaded model (but not meshes) from RAM and VRAM");
}
// Load meshes from model file
@ -950,6 +984,7 @@ void UnloadMaterial(Material material)
}
RL_FREE(material.maps);
RL_FREE(material.params);
}
// Set texture for a material map type (MAP_DIFFUSE, MAP_SPECULAR...)

+ 2
- 1
src/raylib.h 查看文件

@ -1321,7 +1321,8 @@ RLAPI void DrawGizmo(Vector3 position);
// Model loading/unloading functions
RLAPI Model LoadModel(const char *fileName); // Load model from files (meshes and materials)
RLAPI Model LoadModelFromMesh(Mesh mesh); // Load model from generated mesh (default material)
RLAPI void UnloadModel(Model model); // Unload model from memory (RAM and/or VRAM)
RLAPI void UnloadModel(Model model); // Unload model (including meshes) from memory (RAM and/or VRAM)
RLAPI void UnloadModelKeepMeshes(Model model); // Unload model (but not meshes) from memory (RAM and/or VRAM)
// Mesh loading/unloading functions
RLAPI Mesh *LoadMeshes(const char *fileName, int *meshCount); // Load meshes from model file

Loading…
取消
儲存