Jeffery Myers 1 week ago
committed by GitHub
parent
commit
1c9f1d6e03
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
1 changed files with 42 additions and 2 deletions
  1. +42
    -2
      src/rmodels.c

+ 42
- 2
src/rmodels.c View File

@ -5532,6 +5532,10 @@ static Model LoadGLTF(const char *fileName)
// WARNING: SPECS: POSITION accessor MUST have its min and max properties defined
// make sure we don't leak this buffer if there are multiple attributes of the same type
if (model.meshes[meshIndex].vertices)
MemFree(model.meshes[meshIndex].vertices);
if ((attribute->type == cgltf_type_vec3) && (attribute->component_type == cgltf_component_type_r_32f))
{
// Init raylib mesh vertices to copy glTF attribute data
@ -5557,6 +5561,10 @@ static Model LoadGLTF(const char *fileName)
{
cgltf_accessor *attribute = mesh->primitives[p].attributes[j].data;
// make sure we don't leak this buffer if there are multiple attributes of the same type
if (model.meshes[meshIndex].normals)
MemFree(model.meshes[meshIndex].normals);
if ((attribute->type == cgltf_type_vec3) && (attribute->component_type == cgltf_component_type_r_32f))
{
// Init raylib mesh normals to copy glTF attribute data
@ -5581,6 +5589,10 @@ static Model LoadGLTF(const char *fileName)
{
cgltf_accessor *attribute = mesh->primitives[p].attributes[j].data;
// make sure we don't leak this buffer if there are multiple attributes of the same type
if (model.meshes[meshIndex].tangents)
MemFree(model.meshes[meshIndex].tangents);
if ((attribute->type == cgltf_type_vec4) && (attribute->component_type == cgltf_component_type_r_32f))
{
// Init raylib mesh tangent to copy glTF attribute data
@ -5651,8 +5663,21 @@ static Model LoadGLTF(const char *fileName)
else TRACELOG(LOG_WARNING, "MODEL: [%s] Texcoords attribute data format not supported, use vec2 float", fileName);
int index = mesh->primitives[p].attributes[j].index;
if (index == 0) model.meshes[meshIndex].texcoords = texcoordPtr;
else if (index == 1) model.meshes[meshIndex].texcoords2 = texcoordPtr;
if (index == 0)
{
// make sure we don't leak this buffer if there are multiple attributes of the same type
if (model.meshes[meshIndex].texcoords)
MemFree(model.meshes[meshIndex].texcoords);
model.meshes[meshIndex].texcoords = texcoordPtr;
}
else if (index == 1)
{
// make sure we don't leak this buffer if there are multiple attributes of the same type
if (model.meshes[meshIndex].texcoords2)
MemFree(model.meshes[meshIndex].texcoords2);
model.meshes[meshIndex].texcoords2 = texcoordPtr;
}
else
{
TRACELOG(LOG_WARNING, "MODEL: [%s] No more than 2 texture coordinates attributes supported", fileName);
@ -5664,6 +5689,9 @@ static Model LoadGLTF(const char *fileName)
cgltf_accessor *attribute = mesh->primitives[p].attributes[j].data;
// WARNING: SPECS: All components of each COLOR_n accessor element MUST be clamped to [0.0, 1.0] range
// make sure we don't leak this buffer if there are multiple attributes of the same type
if (model.meshes[meshIndex].colors)
MemFree(model.meshes[meshIndex].colors);
if (attribute->type == cgltf_type_vec3) // RGB
{
@ -5782,6 +5810,10 @@ static Model LoadGLTF(const char *fileName)
model.meshes[meshIndex].triangleCount = (int)attribute->count/3;
// make sure we don't leak this buffer if there are multiple attributes of the same type
if (model.meshes[meshIndex].indices)
MemFree(model.meshes[meshIndex].indices);
if (attribute->component_type == cgltf_component_type_r_16u)
{
// Init raylib mesh indices to copy glTF attribute data
@ -5896,6 +5928,10 @@ static Model LoadGLTF(const char *fileName)
// if data is provided in any other format, it is converted to supported format but
// it could imply data loss (a warning message is issued in that case)
// make sure we don't leak this buffer if there are multiple attributes of the same type
if (model.meshes[meshIndex].boneIds)
MemFree(model.meshes[meshIndex].boneIds);
if (attribute->type == cgltf_type_vec4)
{
if (attribute->component_type == cgltf_component_type_r_8u)
@ -5939,6 +5975,10 @@ static Model LoadGLTF(const char *fileName)
{
cgltf_accessor *attribute = mesh->primitives[p].attributes[j].data;
// make sure we don't leak this buffer if there are multiple attributes of the same type
if (model.meshes[meshIndex].boneWeights)
MemFree(model.meshes[meshIndex].boneWeights);
if (attribute->type == cgltf_type_vec4)
{
if (attribute->component_type == cgltf_component_type_r_8u)

Loading…
Cancel
Save