|
@@ -651,7 +651,7 @@ Model LoadModel(const char *fileName)
|
|
|
TraceLog(LOG_WARNING, "[%s] No meshes can be loaded, default to cube mesh", fileName);
|
|
|
|
|
|
model.meshCount = 1;
|
|
|
- model.meshes = (Mesh *)calloc(model.meshCount, sizeof(Mesh));
|
|
|
+ model.meshes = (Mesh *)RL_CALLOC(model.meshCount, sizeof(Mesh));
|
|
|
model.meshes[0] = GenMeshCube(1.0f, 1.0f, 1.0f);
|
|
|
}
|
|
|
else
|
|
@@ -665,10 +665,10 @@ Model LoadModel(const char *fileName)
|
|
|
TraceLog(LOG_WARNING, "[%s] No materials can be loaded, default to white material", fileName);
|
|
|
|
|
|
model.materialCount = 1;
|
|
|
- model.materials = (Material *)calloc(model.materialCount, sizeof(Material));
|
|
|
+ model.materials = (Material *)RL_CALLOC(model.materialCount, sizeof(Material));
|
|
|
model.materials[0] = LoadMaterialDefault();
|
|
|
|
|
|
- model.meshMaterial = (int *)calloc(model.meshCount, sizeof(int));
|
|
|
+ model.meshMaterial = (int *)RL_CALLOC(model.meshCount, sizeof(int));
|
|
|
}
|
|
|
|
|
|
return model;
|
|
@@ -685,14 +685,14 @@ Model LoadModelFromMesh(Mesh mesh)
|
|
|
model.transform = MatrixIdentity();
|
|
|
|
|
|
model.meshCount = 1;
|
|
|
- model.meshes = (Mesh *)malloc(model.meshCount*sizeof(Mesh));
|
|
|
+ model.meshes = (Mesh *)RL_MALLOC(model.meshCount*sizeof(Mesh));
|
|
|
model.meshes[0] = mesh;
|
|
|
|
|
|
model.materialCount = 1;
|
|
|
- model.materials = (Material *)malloc(model.materialCount*sizeof(Material));
|
|
|
+ model.materials = (Material *)RL_MALLOC(model.materialCount*sizeof(Material));
|
|
|
model.materials[0] = LoadMaterialDefault();
|
|
|
|
|
|
- model.meshMaterial = (int *)malloc(model.meshCount*sizeof(int));
|
|
|
+ model.meshMaterial = (int *)RL_MALLOC(model.meshCount*sizeof(int));
|
|
|
model.meshMaterial[0] = 0; // First material index
|
|
|
|
|
|
return model;
|
|
@@ -704,13 +704,13 @@ void UnloadModel(Model model)
|
|
|
for (int i = 0; i < model.meshCount; i++) UnloadMesh(&model.meshes[i]);
|
|
|
for (int i = 0; i < model.materialCount; i++) UnloadMaterial(model.materials[i]);
|
|
|
|
|
|
- free(model.meshes);
|
|
|
- free(model.materials);
|
|
|
- free(model.meshMaterial);
|
|
|
+ RL_FREE(model.meshes);
|
|
|
+ RL_FREE(model.materials);
|
|
|
+ RL_FREE(model.meshMaterial);
|
|
|
|
|
|
// Unload animation data
|
|
|
- free(model.bones);
|
|
|
- free(model.bindPose);
|
|
|
+ RL_FREE(model.bones);
|
|
|
+ RL_FREE(model.bindPose);
|
|
|
|
|
|
TraceLog(LOG_INFO, "Unloaded model data from RAM and VRAM");
|
|
|
}
|
|
@@ -866,7 +866,7 @@ void SetModelMeshMaterial(Model *model, int meshId, int materialId)
|
|
|
// Load model animations from file
|
|
|
ModelAnimation *LoadModelAnimations(const char *filename, int *animCount)
|
|
|
{
|
|
|
- ModelAnimation *animations = (ModelAnimation *)malloc(1*sizeof(ModelAnimation));
|
|
|
+ ModelAnimation *animations = (ModelAnimation *)RL_MALLOC(1*sizeof(ModelAnimation));
|
|
|
int count = 1;
|
|
|
|
|
|
#define IQM_MAGIC "INTERQUAKEMODEL" // IQM file magic number
|
|
@@ -935,12 +935,12 @@ ModelAnimation *LoadModelAnimations(const char *filename, int *animCount)
|
|
|
|
|
|
// bones
|
|
|
IQMPose *poses;
|
|
|
- poses = malloc(sizeof(IQMPose)*iqm.num_poses);
|
|
|
+ poses = RL_MALLOC(sizeof(IQMPose)*iqm.num_poses);
|
|
|
fseek(iqmFile, iqm.ofs_poses, SEEK_SET);
|
|
|
fread(poses, sizeof(IQMPose)*iqm.num_poses, 1, iqmFile);
|
|
|
|
|
|
animation.boneCount = iqm.num_poses;
|
|
|
- animation.bones = malloc(sizeof(BoneInfo)*iqm.num_poses);
|
|
|
+ animation.bones = RL_MALLOC(sizeof(BoneInfo)*iqm.num_poses);
|
|
|
|
|
|
for (int j = 0; j < iqm.num_poses; j++)
|
|
|
{
|
|
@@ -957,12 +957,12 @@ ModelAnimation *LoadModelAnimations(const char *filename, int *animCount)
|
|
|
//animation.framerate = anim.framerate;
|
|
|
|
|
|
// frameposes
|
|
|
- unsigned short *framedata = malloc(sizeof(unsigned short)*iqm.num_frames*iqm.num_framechannels);
|
|
|
+ unsigned short *framedata = RL_MALLOC(sizeof(unsigned short)*iqm.num_frames*iqm.num_framechannels);
|
|
|
fseek(iqmFile, iqm.ofs_frames, SEEK_SET);
|
|
|
fread(framedata, sizeof(unsigned short)*iqm.num_frames*iqm.num_framechannels, 1, iqmFile);
|
|
|
|
|
|
- animation.framePoses = malloc(sizeof(Transform*)*anim.num_frames);
|
|
|
- for (int j = 0; j < anim.num_frames; j++) animation.framePoses[j] = malloc(sizeof(Transform)*iqm.num_poses);
|
|
|
+ animation.framePoses = RL_MALLOC(sizeof(Transform*)*anim.num_frames);
|
|
|
+ for (int j = 0; j < anim.num_frames; j++) animation.framePoses[j] = RL_MALLOC(sizeof(Transform)*iqm.num_poses);
|
|
|
|
|
|
int dcounter = anim.first_frame*iqm.num_framechannels;
|
|
|
|
|
@@ -1069,8 +1069,8 @@ ModelAnimation *LoadModelAnimations(const char *filename, int *animCount)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- free(framedata);
|
|
|
- free(poses);
|
|
|
+ RL_FREE(framedata);
|
|
|
+ RL_FREE(poses);
|
|
|
|
|
|
fclose(iqmFile);
|
|
|
|
|
@@ -1145,10 +1145,10 @@ void UpdateModelAnimation(Model model, ModelAnimation anim, int frame)
|
|
|
// Unload animation data
|
|
|
void UnloadModelAnimation(ModelAnimation anim)
|
|
|
{
|
|
|
- for (int i = 0; i < anim.frameCount; i++) free(anim.framePoses[i]);
|
|
|
+ for (int i = 0; i < anim.frameCount; i++) RL_FREE(anim.framePoses[i]);
|
|
|
|
|
|
- free(anim.bones);
|
|
|
- free(anim.framePoses);
|
|
|
+ RL_FREE(anim.bones);
|
|
|
+ RL_FREE(anim.framePoses);
|
|
|
}
|
|
|
|
|
|
// Check model animation skeleton match
|
|
@@ -1177,7 +1177,7 @@ Mesh GenMeshPoly(int sides, float radius)
|
|
|
int vertexCount = sides*3;
|
|
|
|
|
|
// Vertices definition
|
|
|
- Vector3 *vertices = (Vector3 *)malloc(vertexCount*sizeof(Vector3));
|
|
|
+ Vector3 *vertices = (Vector3 *)RL_MALLOC(vertexCount*sizeof(Vector3));
|
|
|
for (int i = 0, v = 0; i < 360; i += 360/sides, v += 3)
|
|
|
{
|
|
|
vertices[v] = (Vector3){ 0.0f, 0.0f, 0.0f };
|
|
@@ -1186,18 +1186,18 @@ Mesh GenMeshPoly(int sides, float radius)
|
|
|
}
|
|
|
|
|
|
// Normals definition
|
|
|
- Vector3 *normals = (Vector3 *)malloc(vertexCount*sizeof(Vector3));
|
|
|
+ Vector3 *normals = (Vector3 *)RL_MALLOC(vertexCount*sizeof(Vector3));
|
|
|
for (int n = 0; n < vertexCount; n++) normals[n] = (Vector3){ 0.0f, 1.0f, 0.0f }; // Vector3.up;
|
|
|
|
|
|
// TexCoords definition
|
|
|
- Vector2 *texcoords = (Vector2 *)malloc(vertexCount*sizeof(Vector2));
|
|
|
+ Vector2 *texcoords = (Vector2 *)RL_MALLOC(vertexCount*sizeof(Vector2));
|
|
|
for (int n = 0; n < vertexCount; n++) texcoords[n] = (Vector2){ 0.0f, 0.0f };
|
|
|
|
|
|
mesh.vertexCount = vertexCount;
|
|
|
mesh.triangleCount = sides;
|
|
|
- mesh.vertices = (float *)malloc(mesh.vertexCount*3*sizeof(float));
|
|
|
- mesh.texcoords = (float *)malloc(mesh.vertexCount*2*sizeof(float));
|
|
|
- mesh.normals = (float *)malloc(mesh.vertexCount*3*sizeof(float));
|
|
|
+ mesh.vertices = (float *)RL_MALLOC(mesh.vertexCount*3*sizeof(float));
|
|
|
+ mesh.texcoords = (float *)RL_MALLOC(mesh.vertexCount*2*sizeof(float));
|
|
|
+ mesh.normals = (float *)RL_MALLOC(mesh.vertexCount*3*sizeof(float));
|
|
|
|
|
|
// Mesh vertices position array
|
|
|
for (int i = 0; i < mesh.vertexCount; i++)
|
|
@@ -1222,9 +1222,9 @@ Mesh GenMeshPoly(int sides, float radius)
|
|
|
mesh.normals[3*i + 2] = normals[i].z;
|
|
|
}
|
|
|
|
|
|
- free(vertices);
|
|
|
- free(normals);
|
|
|
- free(texcoords);
|
|
|
+ RL_FREE(vertices);
|
|
|
+ RL_FREE(normals);
|
|
|
+ RL_FREE(texcoords);
|
|
|
|
|
|
// Upload vertex data to GPU (static mesh)
|
|
|
rlLoadMesh(&mesh, false);
|
|
@@ -1245,7 +1245,7 @@ Mesh GenMeshPlane(float width, float length, int resX, int resZ)
|
|
|
// Vertices definition
|
|
|
int vertexCount = resX*resZ; // vertices get reused for the faces
|
|
|
|
|
|
- Vector3 *vertices = (Vector3 *)malloc(vertexCount*sizeof(Vector3));
|
|
|
+ Vector3 *vertices = (Vector3 *)RL_MALLOC(vertexCount*sizeof(Vector3));
|
|
|
for (int z = 0; z < resZ; z++)
|
|
|
{
|
|
|
// [-length/2, length/2]
|
|
@@ -1259,11 +1259,11 @@ Mesh GenMeshPlane(float width, float length, int resX, int resZ)
|
|
|
}
|
|
|
|
|
|
// Normals definition
|
|
|
- Vector3 *normals = (Vector3 *)malloc(vertexCount*sizeof(Vector3));
|
|
|
+ Vector3 *normals = (Vector3 *)RL_MALLOC(vertexCount*sizeof(Vector3));
|
|
|
for (int n = 0; n < vertexCount; n++) normals[n] = (Vector3){ 0.0f, 1.0f, 0.0f }; // Vector3.up;
|
|
|
|
|
|
// TexCoords definition
|
|
|
- Vector2 *texcoords = (Vector2 *)malloc(vertexCount*sizeof(Vector2));
|
|
|
+ Vector2 *texcoords = (Vector2 *)RL_MALLOC(vertexCount*sizeof(Vector2));
|
|
|
for (int v = 0; v < resZ; v++)
|
|
|
{
|
|
|
for (int u = 0; u < resX; u++)
|
|
@@ -1274,7 +1274,7 @@ Mesh GenMeshPlane(float width, float length, int resX, int resZ)
|
|
|
|
|
|
// Triangles definition (indices)
|
|
|
int numFaces = (resX - 1)*(resZ - 1);
|
|
|
- int *triangles = (int *)malloc(numFaces*6*sizeof(int));
|
|
|
+ int *triangles = (int *)RL_MALLOC(numFaces*6*sizeof(int));
|
|
|
int t = 0;
|
|
|
for (int face = 0; face < numFaces; face++)
|
|
|
{
|
|
@@ -1292,10 +1292,10 @@ Mesh GenMeshPlane(float width, float length, int resX, int resZ)
|
|
|
|
|
|
mesh.vertexCount = vertexCount;
|
|
|
mesh.triangleCount = numFaces*2;
|
|
|
- mesh.vertices = (float *)malloc(mesh.vertexCount*3*sizeof(float));
|
|
|
- mesh.texcoords = (float *)malloc(mesh.vertexCount*2*sizeof(float));
|
|
|
- mesh.normals = (float *)malloc(mesh.vertexCount*3*sizeof(float));
|
|
|
- mesh.indices = (unsigned short *)malloc(mesh.triangleCount*3*sizeof(unsigned short));
|
|
|
+ mesh.vertices = (float *)RL_MALLOC(mesh.vertexCount*3*sizeof(float));
|
|
|
+ mesh.texcoords = (float *)RL_MALLOC(mesh.vertexCount*2*sizeof(float));
|
|
|
+ mesh.normals = (float *)RL_MALLOC(mesh.vertexCount*3*sizeof(float));
|
|
|
+ mesh.indices = (unsigned short *)RL_MALLOC(mesh.triangleCount*3*sizeof(unsigned short));
|
|
|
|
|
|
// Mesh vertices position array
|
|
|
for (int i = 0; i < mesh.vertexCount; i++)
|
|
@@ -1323,10 +1323,10 @@ Mesh GenMeshPlane(float width, float length, int resX, int resZ)
|
|
|
// Mesh indices array initialization
|
|
|
for (int i = 0; i < mesh.triangleCount*3; i++) mesh.indices[i] = triangles[i];
|
|
|
|
|
|
- free(vertices);
|
|
|
- free(normals);
|
|
|
- free(texcoords);
|
|
|
- free(triangles);
|
|
|
+ RL_FREE(vertices);
|
|
|
+ RL_FREE(normals);
|
|
|
+ RL_FREE(texcoords);
|
|
|
+ RL_FREE(triangles);
|
|
|
|
|
|
#else // Use par_shapes library to generate plane mesh
|
|
|
|
|
@@ -1335,9 +1335,9 @@ Mesh GenMeshPlane(float width, float length, int resX, int resZ)
|
|
|
par_shapes_rotate(plane, -PI/2.0f, (float[]){ 1, 0, 0 });
|
|
|
par_shapes_translate(plane, -width/2, 0.0f, length/2);
|
|
|
|
|
|
- mesh.vertices = (float *)malloc(plane->ntriangles*3*3*sizeof(float));
|
|
|
- mesh.texcoords = (float *)malloc(plane->ntriangles*3*2*sizeof(float));
|
|
|
- mesh.normals = (float *)malloc(plane->ntriangles*3*3*sizeof(float));
|
|
|
+ mesh.vertices = (float *)RL_MALLOC(plane->ntriangles*3*3*sizeof(float));
|
|
|
+ mesh.texcoords = (float *)RL_MALLOC(plane->ntriangles*3*2*sizeof(float));
|
|
|
+ mesh.normals = (float *)RL_MALLOC(plane->ntriangles*3*3*sizeof(float));
|
|
|
|
|
|
mesh.vertexCount = plane->ntriangles*3;
|
|
|
mesh.triangleCount = plane->ntriangles;
|
|
@@ -1453,16 +1453,16 @@ Mesh GenMeshCube(float width, float height, float length)
|
|
|
-1.0f, 0.0f, 0.0f
|
|
|
};
|
|
|
|
|
|
- mesh.vertices = (float *)malloc(24*3*sizeof(float));
|
|
|
+ mesh.vertices = (float *)RL_MALLOC(24*3*sizeof(float));
|
|
|
memcpy(mesh.vertices, vertices, 24*3*sizeof(float));
|
|
|
|
|
|
- mesh.texcoords = (float *)malloc(24*2*sizeof(float));
|
|
|
+ mesh.texcoords = (float *)RL_MALLOC(24*2*sizeof(float));
|
|
|
memcpy(mesh.texcoords, texcoords, 24*2*sizeof(float));
|
|
|
|
|
|
- mesh.normals = (float *)malloc(24*3*sizeof(float));
|
|
|
+ mesh.normals = (float *)RL_MALLOC(24*3*sizeof(float));
|
|
|
memcpy(mesh.normals, normals, 24*3*sizeof(float));
|
|
|
|
|
|
- mesh.indices = (unsigned short *)malloc(36*sizeof(unsigned short));
|
|
|
+ mesh.indices = (unsigned short *)RL_MALLOC(36*sizeof(unsigned short));
|
|
|
|
|
|
int k = 0;
|
|
|
|
|
@@ -1500,9 +1500,9 @@ par_shapes_mesh* par_shapes_create_icosahedron(); // 20 sides polyhedron
|
|
|
par_shapes_translate(cube, -width/2, 0.0f, -length/2);
|
|
|
par_shapes_compute_normals(cube);
|
|
|
|
|
|
- mesh.vertices = (float *)malloc(cube->ntriangles*3*3*sizeof(float));
|
|
|
- mesh.texcoords = (float *)malloc(cube->ntriangles*3*2*sizeof(float));
|
|
|
- mesh.normals = (float *)malloc(cube->ntriangles*3*3*sizeof(float));
|
|
|
+ mesh.vertices = (float *)RL_MALLOC(cube->ntriangles*3*3*sizeof(float));
|
|
|
+ mesh.texcoords = (float *)RL_MALLOC(cube->ntriangles*3*2*sizeof(float));
|
|
|
+ mesh.normals = (float *)RL_MALLOC(cube->ntriangles*3*3*sizeof(float));
|
|
|
|
|
|
mesh.vertexCount = cube->ntriangles*3;
|
|
|
mesh.triangleCount = cube->ntriangles;
|
|
@@ -1539,9 +1539,9 @@ RLAPI Mesh GenMeshSphere(float radius, int rings, int slices)
|
|
|
par_shapes_scale(sphere, radius, radius, radius);
|
|
|
// NOTE: Soft normals are computed internally
|
|
|
|
|
|
- mesh.vertices = (float *)malloc(sphere->ntriangles*3*3*sizeof(float));
|
|
|
- mesh.texcoords = (float *)malloc(sphere->ntriangles*3*2*sizeof(float));
|
|
|
- mesh.normals = (float *)malloc(sphere->ntriangles*3*3*sizeof(float));
|
|
|
+ mesh.vertices = (float *)RL_MALLOC(sphere->ntriangles*3*3*sizeof(float));
|
|
|
+ mesh.texcoords = (float *)RL_MALLOC(sphere->ntriangles*3*2*sizeof(float));
|
|
|
+ mesh.normals = (float *)RL_MALLOC(sphere->ntriangles*3*3*sizeof(float));
|
|
|
|
|
|
mesh.vertexCount = sphere->ntriangles*3;
|
|
|
mesh.triangleCount = sphere->ntriangles;
|
|
@@ -1577,9 +1577,9 @@ RLAPI Mesh GenMeshHemiSphere(float radius, int rings, int slices)
|
|
|
par_shapes_scale(sphere, radius, radius, radius);
|
|
|
// NOTE: Soft normals are computed internally
|
|
|
|
|
|
- mesh.vertices = (float *)malloc(sphere->ntriangles*3*3*sizeof(float));
|
|
|
- mesh.texcoords = (float *)malloc(sphere->ntriangles*3*2*sizeof(float));
|
|
|
- mesh.normals = (float *)malloc(sphere->ntriangles*3*3*sizeof(float));
|
|
|
+ mesh.vertices = (float *)RL_MALLOC(sphere->ntriangles*3*3*sizeof(float));
|
|
|
+ mesh.texcoords = (float *)RL_MALLOC(sphere->ntriangles*3*2*sizeof(float));
|
|
|
+ mesh.normals = (float *)RL_MALLOC(sphere->ntriangles*3*3*sizeof(float));
|
|
|
|
|
|
mesh.vertexCount = sphere->ntriangles*3;
|
|
|
mesh.triangleCount = sphere->ntriangles;
|
|
@@ -1635,9 +1635,9 @@ Mesh GenMeshCylinder(float radius, float height, int slices)
|
|
|
par_shapes_merge_and_free(cylinder, capTop);
|
|
|
par_shapes_merge_and_free(cylinder, capBottom);
|
|
|
|
|
|
- mesh.vertices = (float *)malloc(cylinder->ntriangles*3*3*sizeof(float));
|
|
|
- mesh.texcoords = (float *)malloc(cylinder->ntriangles*3*2*sizeof(float));
|
|
|
- mesh.normals = (float *)malloc(cylinder->ntriangles*3*3*sizeof(float));
|
|
|
+ mesh.vertices = (float *)RL_MALLOC(cylinder->ntriangles*3*3*sizeof(float));
|
|
|
+ mesh.texcoords = (float *)RL_MALLOC(cylinder->ntriangles*3*2*sizeof(float));
|
|
|
+ mesh.normals = (float *)RL_MALLOC(cylinder->ntriangles*3*3*sizeof(float));
|
|
|
|
|
|
mesh.vertexCount = cylinder->ntriangles*3;
|
|
|
mesh.triangleCount = cylinder->ntriangles;
|
|
@@ -1677,9 +1677,9 @@ Mesh GenMeshTorus(float radius, float size, int radSeg, int sides)
|
|
|
par_shapes_mesh *torus = par_shapes_create_torus(radSeg, sides, radius);
|
|
|
par_shapes_scale(torus, size/2, size/2, size/2);
|
|
|
|
|
|
- mesh.vertices = (float *)malloc(torus->ntriangles*3*3*sizeof(float));
|
|
|
- mesh.texcoords = (float *)malloc(torus->ntriangles*3*2*sizeof(float));
|
|
|
- mesh.normals = (float *)malloc(torus->ntriangles*3*3*sizeof(float));
|
|
|
+ mesh.vertices = (float *)RL_MALLOC(torus->ntriangles*3*3*sizeof(float));
|
|
|
+ mesh.texcoords = (float *)RL_MALLOC(torus->ntriangles*3*2*sizeof(float));
|
|
|
+ mesh.normals = (float *)RL_MALLOC(torus->ntriangles*3*3*sizeof(float));
|
|
|
|
|
|
mesh.vertexCount = torus->ntriangles*3;
|
|
|
mesh.triangleCount = torus->ntriangles;
|
|
@@ -1717,9 +1717,9 @@ Mesh GenMeshKnot(float radius, float size, int radSeg, int sides)
|
|
|
par_shapes_mesh *knot = par_shapes_create_trefoil_knot(radSeg, sides, radius);
|
|
|
par_shapes_scale(knot, size, size, size);
|
|
|
|
|
|
- mesh.vertices = (float *)malloc(knot->ntriangles*3*3*sizeof(float));
|
|
|
- mesh.texcoords = (float *)malloc(knot->ntriangles*3*2*sizeof(float));
|
|
|
- mesh.normals = (float *)malloc(knot->ntriangles*3*3*sizeof(float));
|
|
|
+ mesh.vertices = (float *)RL_MALLOC(knot->ntriangles*3*3*sizeof(float));
|
|
|
+ mesh.texcoords = (float *)RL_MALLOC(knot->ntriangles*3*2*sizeof(float));
|
|
|
+ mesh.normals = (float *)RL_MALLOC(knot->ntriangles*3*3*sizeof(float));
|
|
|
|
|
|
mesh.vertexCount = knot->ntriangles*3;
|
|
|
mesh.triangleCount = knot->ntriangles;
|
|
@@ -1764,9 +1764,9 @@ Mesh GenMeshHeightmap(Image heightmap, Vector3 size)
|
|
|
|
|
|
mesh.vertexCount = mesh.triangleCount*3;
|
|
|
|
|
|
- mesh.vertices = (float *)malloc(mesh.vertexCount*3*sizeof(float));
|
|
|
- mesh.normals = (float *)malloc(mesh.vertexCount*3*sizeof(float));
|
|
|
- mesh.texcoords = (float *)malloc(mesh.vertexCount*2*sizeof(float));
|
|
|
+ mesh.vertices = (float *)RL_MALLOC(mesh.vertexCount*3*sizeof(float));
|
|
|
+ mesh.normals = (float *)RL_MALLOC(mesh.vertexCount*3*sizeof(float));
|
|
|
+ mesh.texcoords = (float *)RL_MALLOC(mesh.vertexCount*2*sizeof(float));
|
|
|
mesh.colors = NULL;
|
|
|
|
|
|
int vCounter = 0; // Used to count vertices float by float
|
|
@@ -1848,7 +1848,7 @@ Mesh GenMeshHeightmap(Image heightmap, Vector3 size)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- free(pixels);
|
|
|
+ RL_FREE(pixels);
|
|
|
|
|
|
// Upload vertex data to GPU (static mesh)
|
|
|
rlLoadMesh(&mesh, false);
|
|
@@ -1878,9 +1878,9 @@ Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize)
|
|
|
float h = cubeSize.z;
|
|
|
float h2 = cubeSize.y;
|
|
|
|
|
|
- Vector3 *mapVertices = (Vector3 *)malloc(maxTriangles*3*sizeof(Vector3));
|
|
|
- Vector2 *mapTexcoords = (Vector2 *)malloc(maxTriangles*3*sizeof(Vector2));
|
|
|
- Vector3 *mapNormals = (Vector3 *)malloc(maxTriangles*3*sizeof(Vector3));
|
|
|
+ Vector3 *mapVertices = (Vector3 *)RL_MALLOC(maxTriangles*3*sizeof(Vector3));
|
|
|
+ Vector2 *mapTexcoords = (Vector2 *)RL_MALLOC(maxTriangles*3*sizeof(Vector2));
|
|
|
+ Vector3 *mapNormals = (Vector3 *)RL_MALLOC(maxTriangles*3*sizeof(Vector3));
|
|
|
|
|
|
// Define the 6 normals of the cube, we will combine them accordingly later...
|
|
|
Vector3 n1 = { 1.0f, 0.0f, 0.0f };
|
|
@@ -2167,9 +2167,9 @@ Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize)
|
|
|
mesh.vertexCount = vCounter;
|
|
|
mesh.triangleCount = vCounter/3;
|
|
|
|
|
|
- mesh.vertices = (float *)malloc(mesh.vertexCount*3*sizeof(float));
|
|
|
- mesh.normals = (float *)malloc(mesh.vertexCount*3*sizeof(float));
|
|
|
- mesh.texcoords = (float *)malloc(mesh.vertexCount*2*sizeof(float));
|
|
|
+ mesh.vertices = (float *)RL_MALLOC(mesh.vertexCount*3*sizeof(float));
|
|
|
+ mesh.normals = (float *)RL_MALLOC(mesh.vertexCount*3*sizeof(float));
|
|
|
+ mesh.texcoords = (float *)RL_MALLOC(mesh.vertexCount*2*sizeof(float));
|
|
|
mesh.colors = NULL;
|
|
|
|
|
|
int fCounter = 0;
|
|
@@ -2204,11 +2204,11 @@ Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize)
|
|
|
fCounter += 2;
|
|
|
}
|
|
|
|
|
|
- free(mapVertices);
|
|
|
- free(mapNormals);
|
|
|
- free(mapTexcoords);
|
|
|
+ RL_FREE(mapVertices);
|
|
|
+ RL_FREE(mapNormals);
|
|
|
+ RL_FREE(mapTexcoords);
|
|
|
|
|
|
- free(cubicmapPixels); // Free image pixel data
|
|
|
+ RL_FREE(cubicmapPixels); // Free image pixel data
|
|
|
|
|
|
// Upload vertex data to GPU (static mesh)
|
|
|
rlLoadMesh(&mesh, false);
|
|
@@ -2250,11 +2250,11 @@ BoundingBox MeshBoundingBox(Mesh mesh)
|
|
|
// Implementation base don: https://answers.unity.com/questions/7789/calculating-tangents-vector4.html
|
|
|
void MeshTangents(Mesh *mesh)
|
|
|
{
|
|
|
- if (mesh->tangents == NULL) mesh->tangents = (float *)malloc(mesh->vertexCount*4*sizeof(float));
|
|
|
+ if (mesh->tangents == NULL) mesh->tangents = (float *)RL_MALLOC(mesh->vertexCount*4*sizeof(float));
|
|
|
else TraceLog(LOG_WARNING, "Mesh tangents already exist");
|
|
|
|
|
|
- Vector3 *tan1 = (Vector3 *)malloc(mesh->vertexCount*sizeof(Vector3));
|
|
|
- Vector3 *tan2 = (Vector3 *)malloc(mesh->vertexCount*sizeof(Vector3));
|
|
|
+ Vector3 *tan1 = (Vector3 *)RL_MALLOC(mesh->vertexCount*sizeof(Vector3));
|
|
|
+ Vector3 *tan2 = (Vector3 *)RL_MALLOC(mesh->vertexCount*sizeof(Vector3));
|
|
|
|
|
|
for (int i = 0; i < mesh->vertexCount; i += 3)
|
|
|
{
|
|
@@ -2318,8 +2318,8 @@ void MeshTangents(Mesh *mesh)
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
- free(tan1);
|
|
|
- free(tan2);
|
|
|
+ RL_FREE(tan1);
|
|
|
+ RL_FREE(tan2);
|
|
|
|
|
|
// Load a new tangent attributes buffer
|
|
|
mesh->vboId[LOC_VERTEX_TANGENT] = rlLoadAttribBuffer(mesh->vaoId, LOC_VERTEX_TANGENT, mesh->tangents, mesh->vertexCount*4*sizeof(float), false);
|
|
@@ -2746,7 +2746,7 @@ static Model LoadOBJ(const char *fileName)
|
|
|
long length = ftell(objFile); // Get file size
|
|
|
fseek(objFile, 0, SEEK_SET); // Reset file pointer
|
|
|
|
|
|
- data = (char *)malloc(length);
|
|
|
+ data = (char *)RL_MALLOC(length);
|
|
|
|
|
|
fread(data, length, 1, objFile);
|
|
|
dataLength = length;
|
|
@@ -2763,12 +2763,12 @@ static Model LoadOBJ(const char *fileName)
|
|
|
|
|
|
// Init model meshes array
|
|
|
model.meshCount = meshCount;
|
|
|
- model.meshes = (Mesh *)malloc(model.meshCount*sizeof(Mesh));
|
|
|
+ model.meshes = (Mesh *)RL_MALLOC(model.meshCount*sizeof(Mesh));
|
|
|
|
|
|
// Init model materials array
|
|
|
model.materialCount = materialCount;
|
|
|
- model.materials = (Material *)malloc(model.materialCount*sizeof(Material));
|
|
|
- model.meshMaterial = (int *)calloc(model.meshCount, sizeof(int));
|
|
|
+ model.materials = (Material *)RL_MALLOC(model.materialCount*sizeof(Material));
|
|
|
+ model.meshMaterial = (int *)RL_CALLOC(model.meshCount, sizeof(int));
|
|
|
|
|
|
/*
|
|
|
// Multiple meshes data reference
|
|
@@ -2787,9 +2787,9 @@ static Model LoadOBJ(const char *fileName)
|
|
|
memset(&mesh, 0, sizeof(Mesh));
|
|
|
mesh.vertexCount = attrib.num_faces*3;
|
|
|
mesh.triangleCount = attrib.num_faces;
|
|
|
- mesh.vertices = (float *)malloc(mesh.vertexCount*3*sizeof(float));
|
|
|
- mesh.texcoords = (float *)malloc(mesh.vertexCount*2*sizeof(float));
|
|
|
- mesh.normals = (float *)malloc(mesh.vertexCount*3*sizeof(float));
|
|
|
+ mesh.vertices = (float *)RL_MALLOC(mesh.vertexCount*3*sizeof(float));
|
|
|
+ mesh.texcoords = (float *)RL_MALLOC(mesh.vertexCount*2*sizeof(float));
|
|
|
+ mesh.normals = (float *)RL_MALLOC(mesh.vertexCount*3*sizeof(float));
|
|
|
|
|
|
int vCount = 0;
|
|
|
int vtCount = 0;
|
|
@@ -2934,17 +2934,26 @@ static Model LoadIQM(const char *fileName)
|
|
|
typedef struct IQMTriangle {
|
|
|
unsigned int vertex[3];
|
|
|
} IQMTriangle;
|
|
|
-
|
|
|
- // NOTE: Adjacency unused by default
|
|
|
- typedef struct IQMAdjacency {
|
|
|
- unsigned int triangle[3];
|
|
|
- } IQMAdjacency;
|
|
|
-
|
|
|
+
|
|
|
typedef struct IQMJoint {
|
|
|
unsigned int name;
|
|
|
int parent;
|
|
|
float translate[3], rotate[4], scale[3];
|
|
|
} IQMJoint;
|
|
|
+
|
|
|
+ typedef struct IQMVertexArray {
|
|
|
+ unsigned int type;
|
|
|
+ unsigned int flags;
|
|
|
+ unsigned int format;
|
|
|
+ unsigned int size;
|
|
|
+ unsigned int offset;
|
|
|
+ } IQMVertexArray;
|
|
|
+
|
|
|
+ // NOTE: Below IQM structures are not used but listed for reference
|
|
|
+ /*
|
|
|
+ typedef struct IQMAdjacency {
|
|
|
+ unsigned int triangle[3];
|
|
|
+ } IQMAdjacency;
|
|
|
|
|
|
typedef struct IQMPose {
|
|
|
int parent;
|
|
@@ -2960,19 +2969,11 @@ static Model LoadIQM(const char *fileName)
|
|
|
unsigned int flags;
|
|
|
} IQMAnim;
|
|
|
|
|
|
- typedef struct IQMVertexArray {
|
|
|
- unsigned int type;
|
|
|
- unsigned int flags;
|
|
|
- unsigned int format;
|
|
|
- unsigned int size;
|
|
|
- unsigned int offset;
|
|
|
- } IQMVertexArray;
|
|
|
-
|
|
|
- // NOTE: Bounds unused by default
|
|
|
typedef struct IQMBounds {
|
|
|
float bbmin[3], bbmax[3];
|
|
|
float xyradius, radius;
|
|
|
} IQMBounds;
|
|
|
+ */
|
|
|
//-----------------------------------------------------------------------------------
|
|
|
|
|
|
// IQM vertex data types
|
|
@@ -3028,12 +3029,12 @@ static Model LoadIQM(const char *fileName)
|
|
|
}
|
|
|
|
|
|
// Meshes data processing
|
|
|
- imesh = malloc(sizeof(IQMMesh)*iqm.num_meshes);
|
|
|
+ imesh = RL_MALLOC(sizeof(IQMMesh)*iqm.num_meshes);
|
|
|
fseek(iqmFile, iqm.ofs_meshes, SEEK_SET);
|
|
|
fread(imesh, sizeof(IQMMesh)*iqm.num_meshes, 1, iqmFile);
|
|
|
|
|
|
model.meshCount = iqm.num_meshes;
|
|
|
- model.meshes = malloc(model.meshCount*sizeof(Mesh));
|
|
|
+ model.meshes = RL_MALLOC(model.meshCount*sizeof(Mesh));
|
|
|
|
|
|
char name[MESH_NAME_LENGTH];
|
|
|
|
|
@@ -3043,24 +3044,24 @@ static Model LoadIQM(const char *fileName)
|
|
|
fread(name, sizeof(char)*MESH_NAME_LENGTH, 1, iqmFile); // Mesh name not used...
|
|
|
model.meshes[i].vertexCount = imesh[i].num_vertexes;
|
|
|
|
|
|
- model.meshes[i].vertices = malloc(sizeof(float)*model.meshes[i].vertexCount*3); // Default vertex positions
|
|
|
- model.meshes[i].normals = malloc(sizeof(float)*model.meshes[i].vertexCount*3); // Default vertex normals
|
|
|
- model.meshes[i].texcoords = malloc(sizeof(float)*model.meshes[i].vertexCount*2); // Default vertex texcoords
|
|
|
+ model.meshes[i].vertices = RL_MALLOC(sizeof(float)*model.meshes[i].vertexCount*3); // Default vertex positions
|
|
|
+ model.meshes[i].normals = RL_MALLOC(sizeof(float)*model.meshes[i].vertexCount*3); // Default vertex normals
|
|
|
+ model.meshes[i].texcoords = RL_MALLOC(sizeof(float)*model.meshes[i].vertexCount*2); // Default vertex texcoords
|
|
|
|
|
|
- model.meshes[i].boneIds = malloc(sizeof(int)*model.meshes[i].vertexCount*4); // Up-to 4 bones supported!
|
|
|
- model.meshes[i].boneWeights = malloc(sizeof(float)*model.meshes[i].vertexCount*4); // Up-to 4 bones supported!
|
|
|
+ model.meshes[i].boneIds = RL_MALLOC(sizeof(int)*model.meshes[i].vertexCount*4); // Up-to 4 bones supported!
|
|
|
+ model.meshes[i].boneWeights = RL_MALLOC(sizeof(float)*model.meshes[i].vertexCount*4); // Up-to 4 bones supported!
|
|
|
|
|
|
model.meshes[i].triangleCount = imesh[i].num_triangles;
|
|
|
- model.meshes[i].indices = malloc(sizeof(unsigned short)*model.meshes[i].triangleCount*3);
|
|
|
+ model.meshes[i].indices = RL_MALLOC(sizeof(unsigned short)*model.meshes[i].triangleCount*3);
|
|
|
|
|
|
// Animated verted data, what we actually process for rendering
|
|
|
// NOTE: Animated vertex should be re-uploaded to GPU (if not using GPU skinning)
|
|
|
- model.meshes[i].animVertices = malloc(sizeof(float)*model.meshes[i].vertexCount*3);
|
|
|
- model.meshes[i].animNormals = malloc(sizeof(float)*model.meshes[i].vertexCount*3);
|
|
|
+ model.meshes[i].animVertices = RL_MALLOC(sizeof(float)*model.meshes[i].vertexCount*3);
|
|
|
+ model.meshes[i].animNormals = RL_MALLOC(sizeof(float)*model.meshes[i].vertexCount*3);
|
|
|
}
|
|
|
|
|
|
// Triangles data processing
|
|
|
- tri = malloc(sizeof(IQMTriangle)*iqm.num_triangles);
|
|
|
+ tri = RL_MALLOC(sizeof(IQMTriangle)*iqm.num_triangles);
|
|
|
fseek(iqmFile, iqm.ofs_triangles, SEEK_SET);
|
|
|
fread(tri, sizeof(IQMTriangle)*iqm.num_triangles, 1, iqmFile);
|
|
|
|
|
@@ -3079,7 +3080,7 @@ static Model LoadIQM(const char *fileName)
|
|
|
}
|
|
|
|
|
|
// Vertex arrays data processing
|
|
|
- va = malloc(sizeof(IQMVertexArray)*iqm.num_vertexarrays);
|
|
|
+ va = RL_MALLOC(sizeof(IQMVertexArray)*iqm.num_vertexarrays);
|
|
|
fseek(iqmFile, iqm.ofs_vertexarrays, SEEK_SET);
|
|
|
fread(va, sizeof(IQMVertexArray)*iqm.num_vertexarrays, 1, iqmFile);
|
|
|
|
|
@@ -3089,7 +3090,7 @@ static Model LoadIQM(const char *fileName)
|
|
|
{
|
|
|
case IQM_POSITION:
|
|
|
{
|
|
|
- vertex = malloc(sizeof(float)*iqm.num_vertexes*3);
|
|
|
+ vertex = RL_MALLOC(sizeof(float)*iqm.num_vertexes*3);
|
|
|
fseek(iqmFile, va[i].offset, SEEK_SET);
|
|
|
fread(vertex, sizeof(float)*iqm.num_vertexes*3, 1, iqmFile);
|
|
|
|
|
@@ -3106,7 +3107,7 @@ static Model LoadIQM(const char *fileName)
|
|
|
} break;
|
|
|
case IQM_NORMAL:
|
|
|
{
|
|
|
- normal = malloc(sizeof(float)*iqm.num_vertexes*3);
|
|
|
+ normal = RL_MALLOC(sizeof(float)*iqm.num_vertexes*3);
|
|
|
fseek(iqmFile, va[i].offset, SEEK_SET);
|
|
|
fread(normal, sizeof(float)*iqm.num_vertexes*3, 1, iqmFile);
|
|
|
|
|
@@ -3123,7 +3124,7 @@ static Model LoadIQM(const char *fileName)
|
|
|
} break;
|
|
|
case IQM_TEXCOORD:
|
|
|
{
|
|
|
- text = malloc(sizeof(float)*iqm.num_vertexes*2);
|
|
|
+ text = RL_MALLOC(sizeof(float)*iqm.num_vertexes*2);
|
|
|
fseek(iqmFile, va[i].offset, SEEK_SET);
|
|
|
fread(text, sizeof(float)*iqm.num_vertexes*2, 1, iqmFile);
|
|
|
|
|
@@ -3139,7 +3140,7 @@ static Model LoadIQM(const char *fileName)
|
|
|
} break;
|
|
|
case IQM_BLENDINDEXES:
|
|
|
{
|
|
|
- blendi = malloc(sizeof(char)*iqm.num_vertexes*4);
|
|
|
+ blendi = RL_MALLOC(sizeof(char)*iqm.num_vertexes*4);
|
|
|
fseek(iqmFile, va[i].offset, SEEK_SET);
|
|
|
fread(blendi, sizeof(char)*iqm.num_vertexes*4, 1, iqmFile);
|
|
|
|
|
@@ -3155,7 +3156,7 @@ static Model LoadIQM(const char *fileName)
|
|
|
} break;
|
|
|
case IQM_BLENDWEIGHTS:
|
|
|
{
|
|
|
- blendw = malloc(sizeof(unsigned char)*iqm.num_vertexes*4);
|
|
|
+ blendw = RL_MALLOC(sizeof(unsigned char)*iqm.num_vertexes*4);
|
|
|
fseek(iqmFile,va[i].offset,SEEK_SET);
|
|
|
fread(blendw,sizeof(unsigned char)*iqm.num_vertexes*4,1,iqmFile);
|
|
|
|
|
@@ -3173,13 +3174,13 @@ static Model LoadIQM(const char *fileName)
|
|
|
}
|
|
|
|
|
|
// Bones (joints) data processing
|
|
|
- ijoint = malloc(sizeof(IQMJoint)*iqm.num_joints);
|
|
|
+ ijoint = RL_MALLOC(sizeof(IQMJoint)*iqm.num_joints);
|
|
|
fseek(iqmFile, iqm.ofs_joints, SEEK_SET);
|
|
|
fread(ijoint, sizeof(IQMJoint)*iqm.num_joints, 1, iqmFile);
|
|
|
|
|
|
model.boneCount = iqm.num_joints;
|
|
|
- model.bones = malloc(sizeof(BoneInfo)*iqm.num_joints);
|
|
|
- model.bindPose = malloc(sizeof(Transform)*iqm.num_joints);
|
|
|
+ model.bones = RL_MALLOC(sizeof(BoneInfo)*iqm.num_joints);
|
|
|
+ model.bindPose = RL_MALLOC(sizeof(Transform)*iqm.num_joints);
|
|
|
|
|
|
for (int i = 0; i < iqm.num_joints; i++)
|
|
|
{
|
|
@@ -3216,15 +3217,15 @@ static Model LoadIQM(const char *fileName)
|
|
|
}
|
|
|
|
|
|
fclose(iqmFile);
|
|
|
- free(imesh);
|
|
|
- free(tri);
|
|
|
- free(va);
|
|
|
- free(vertex);
|
|
|
- free(normal);
|
|
|
- free(text);
|
|
|
- free(blendi);
|
|
|
- free(blendw);
|
|
|
- free(ijoint);
|
|
|
+ RL_FREE(imesh);
|
|
|
+ RL_FREE(tri);
|
|
|
+ RL_FREE(va);
|
|
|
+ RL_FREE(vertex);
|
|
|
+ RL_FREE(normal);
|
|
|
+ RL_FREE(text);
|
|
|
+ RL_FREE(blendi);
|
|
|
+ RL_FREE(blendw);
|
|
|
+ RL_FREE(ijoint);
|
|
|
|
|
|
return model;
|
|
|
}
|
|
@@ -3249,7 +3250,7 @@ static Model LoadGLTF(const char *fileName)
|
|
|
int size = ftell(gltfFile);
|
|
|
fseek(gltfFile, 0, SEEK_SET);
|
|
|
|
|
|
- void *buffer = malloc(size);
|
|
|
+ void *buffer = RL_MALLOC(size);
|
|
|
fread(buffer, size, 1, gltfFile);
|
|
|
|
|
|
fclose(gltfFile);
|
|
@@ -3259,7 +3260,7 @@ static Model LoadGLTF(const char *fileName)
|
|
|
cgltf_data *data;
|
|
|
cgltf_result result = cgltf_parse(&options, buffer, size, &data);
|
|
|
|
|
|
- free(buffer);
|
|
|
+ RL_FREE(buffer);
|
|
|
|
|
|
if (result == cgltf_result_success)
|
|
|
{
|
|
@@ -3270,7 +3271,7 @@ static Model LoadGLTF(const char *fileName)
|
|
|
|
|
|
// Process glTF data and map to model
|
|
|
model.meshCount = data->meshes_count;
|
|
|
- model.meshes = malloc(model.meshCount*sizeof(Mesh));
|
|
|
+ model.meshes = RL_MALLOC(model.meshCount*sizeof(Mesh));
|
|
|
|
|
|
for (int i = 0; i < model.meshCount; i++)
|
|
|
{
|
|
@@ -3282,11 +3283,11 @@ static Model LoadGLTF(const char *fileName)
|
|
|
model.meshes[i].triangleCount = data->meshes[i].primitives_count;
|
|
|
// data.meshes[i].weights not used (array of weights to be applied to the Morph Targets)
|
|
|
|
|
|
- model.meshes[i].vertices = malloc(sizeof(float)*model.meshes[i].vertexCount*3); // Default vertex positions
|
|
|
- model.meshes[i].normals = malloc(sizeof(float)*model.meshes[i].vertexCount*3); // Default vertex normals
|
|
|
- model.meshes[i].texcoords = malloc(sizeof(float)*model.meshes[i].vertexCount*2); // Default vertex texcoords
|
|
|
+ model.meshes[i].vertices = RL_MALLOC(sizeof(float)*model.meshes[i].vertexCount*3); // Default vertex positions
|
|
|
+ model.meshes[i].normals = RL_MALLOC(sizeof(float)*model.meshes[i].vertexCount*3); // Default vertex normals
|
|
|
+ model.meshes[i].texcoords = RL_MALLOC(sizeof(float)*model.meshes[i].vertexCount*2); // Default vertex texcoords
|
|
|
|
|
|
- model.meshes[i].indices = malloc(sizeof(unsigned short)*model.meshes[i].triangleCount*3);
|
|
|
+ model.meshes[i].indices = RL_MALLOC(sizeof(unsigned short)*model.meshes[i].triangleCount*3);
|
|
|
|
|
|
}
|
|
|
}
|