aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core.c24
-rw-r--r--src/models.c291
-rw-r--r--src/raudio.c38
-rw-r--r--src/raudio.h11
-rw-r--r--src/raylib.h11
-rw-r--r--src/rlgl.h88
-rw-r--r--src/text.c54
-rw-r--r--src/textures.c181
-rw-r--r--src/utils.c6
9 files changed, 365 insertions, 339 deletions
diff --git a/src/core.c b/src/core.c
index 6bb54c51..844994d0 100644
--- a/src/core.c
+++ b/src/core.c
@@ -1113,7 +1113,7 @@ void EndDrawing(void)
unsigned char *screenData = rlReadScreenPixels(screenWidth, screenHeight);
GifWriteFrame(screenData, screenWidth, screenHeight, 10, 8, false);
- free(screenData); // Free image data
+ RL_FREE(screenData); // Free image data
}
if (((gifFramesCounter/15)%2) == 1)
@@ -1595,7 +1595,7 @@ void TakeScreenshot(const char *fileName)
#endif
ExportImage(image, path);
- free(imgData);
+ RL_FREE(imgData);
#if defined(PLATFORM_WEB)
// Download file from MEMFS (emscripten memory filesystem)
@@ -1742,8 +1742,8 @@ char **GetDirectoryFiles(const char *dirPath, int *fileCount)
ClearDirectoryFiles();
// Memory allocation for MAX_DIRECTORY_FILES
- dirFilesPath = (char **)malloc(sizeof(char *)*MAX_DIRECTORY_FILES);
- for (int i = 0; i < MAX_DIRECTORY_FILES; i++) dirFilesPath[i] = (char *)malloc(sizeof(char)*MAX_FILEPATH_LENGTH);
+ dirFilesPath = (char **)RL_MALLOC(sizeof(char *)*MAX_DIRECTORY_FILES);
+ for (int i = 0; i < MAX_DIRECTORY_FILES; i++) dirFilesPath[i] = (char *)RL_MALLOC(sizeof(char)*MAX_FILEPATH_LENGTH);
int counter = 0;
struct dirent *ent;
@@ -1776,9 +1776,9 @@ void ClearDirectoryFiles(void)
{
if (dirFilesCount > 0)
{
- for (int i = 0; i < dirFilesCount; i++) free(dirFilesPath[i]);
+ for (int i = 0; i < dirFilesCount; i++) RL_FREE(dirFilesPath[i]);
- free(dirFilesPath);
+ RL_FREE(dirFilesPath);
dirFilesCount = 0;
}
}
@@ -1808,9 +1808,9 @@ void ClearDroppedFiles(void)
{
if (dropFilesCount > 0)
{
- for (int i = 0; i < dropFilesCount; i++) free(dropFilesPath[i]);
+ for (int i = 0; i < dropFilesCount; i++) RL_FREE(dropFilesPath[i]);
- free(dropFilesPath);
+ RL_FREE(dropFilesPath);
dropFilesCount = 0;
}
@@ -1925,7 +1925,7 @@ void OpenURL(const char *url)
}
else
{
- char *cmd = (char *)calloc(strlen(url) + 10, sizeof(char));
+ char *cmd = (char *)RL_CALLOC(strlen(url) + 10, sizeof(char));
#if defined(_WIN32)
sprintf(cmd, "explorer %s", url);
@@ -1935,7 +1935,7 @@ void OpenURL(const char *url)
sprintf(cmd, "open '%s'", url);
#endif
system(cmd);
- free(cmd);
+ RL_FREE(cmd);
}
}
@@ -3455,11 +3455,11 @@ static void WindowDropCallback(GLFWwindow *window, int count, const char **paths
{
ClearDroppedFiles();
- dropFilesPath = (char **)malloc(sizeof(char *)*count);
+ dropFilesPath = (char **)RL_MALLOC(sizeof(char *)*count);
for (int i = 0; i < count; i++)
{
- dropFilesPath[i] = (char *)malloc(sizeof(char)*MAX_FILEPATH_LENGTH);
+ dropFilesPath[i] = (char *)RL_MALLOC(sizeof(char)*MAX_FILEPATH_LENGTH);
strcpy(dropFilesPath[i], paths[i]);
}
diff --git a/src/models.c b/src/models.c
index 631c4942..c81dfe19 100644
--- a/src/models.c
+++ b/src/models.c
@@ -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);
}
}
diff --git a/src/raudio.c b/src/raudio.c
index 636d15b8..9108a903 100644
--- a/src/raudio.c
+++ b/src/raudio.c
@@ -567,7 +567,7 @@ void SetMasterVolume(float volume)
// Create a new audio buffer. Initially filled with silence
AudioBuffer *CreateAudioBuffer(ma_format format, ma_uint32 channels, ma_uint32 sampleRate, ma_uint32 bufferSizeInFrames, AudioBufferUsage usage)
{
- AudioBuffer *audioBuffer = (AudioBuffer *)calloc(sizeof(*audioBuffer) + (bufferSizeInFrames*channels*ma_get_bytes_per_sample(format)), 1);
+ AudioBuffer *audioBuffer = (AudioBuffer *)RL_CALLOC(sizeof(*audioBuffer) + (bufferSizeInFrames*channels*ma_get_bytes_per_sample(format)), 1);
if (audioBuffer == NULL)
{
TraceLog(LOG_ERROR, "CreateAudioBuffer() : Failed to allocate memory for audio buffer");
@@ -591,7 +591,7 @@ AudioBuffer *CreateAudioBuffer(ma_format format, ma_uint32 channels, ma_uint32 s
if (result != MA_SUCCESS)
{
TraceLog(LOG_ERROR, "CreateAudioBuffer() : Failed to create data conversion pipeline");
- free(audioBuffer);
+ RL_FREE(audioBuffer);
return NULL;
}
@@ -623,7 +623,7 @@ void DeleteAudioBuffer(AudioBuffer *audioBuffer)
}
UntrackAudioBuffer(audioBuffer);
- free(audioBuffer);
+ RL_FREE(audioBuffer);
}
// Check if an audio buffer is playing
@@ -863,7 +863,7 @@ Sound LoadSoundFromWave(Wave wave)
// Unload wave data
void UnloadWave(Wave wave)
{
- if (wave.data != NULL) free(wave.data);
+ if (wave.data != NULL) RL_FREE(wave.data);
TraceLog(LOG_INFO, "Unloaded wave data from RAM");
}
@@ -1017,7 +1017,7 @@ void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels)
return;
}
- void *data = malloc(frameCount*channels*(sampleSize/8));
+ void *data = RL_MALLOC(frameCount*channels*(sampleSize/8));
frameCount = (ma_uint32)ma_convert_frames(data, formatOut, channels, sampleRate, wave->data, formatIn, wave->channels, wave->sampleRate, frameCountIn);
if (frameCount == 0)
@@ -1030,7 +1030,7 @@ void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels)
wave->sampleSize = sampleSize;
wave->sampleRate = sampleRate;
wave->channels = channels;
- free(wave->data);
+ RL_FREE(wave->data);
wave->data = data;
}
@@ -1039,7 +1039,7 @@ Wave WaveCopy(Wave wave)
{
Wave newWave = { 0 };
- newWave.data = malloc(wave.sampleCount*wave.sampleSize/8*wave.channels);
+ newWave.data = RL_MALLOC(wave.sampleCount*wave.sampleSize/8*wave.channels);
if (newWave.data != NULL)
{
@@ -1064,11 +1064,11 @@ void WaveCrop(Wave *wave, int initSample, int finalSample)
{
int sampleCount = finalSample - initSample;
- void *data = malloc(sampleCount*wave->sampleSize/8*wave->channels);
+ void *data = RL_MALLOC(sampleCount*wave->sampleSize/8*wave->channels);
memcpy(data, (unsigned char *)wave->data + (initSample*wave->channels*wave->sampleSize/8), sampleCount*wave->channels*wave->sampleSize/8);
- free(wave->data);
+ RL_FREE(wave->data);
wave->data = data;
}
else TraceLog(LOG_WARNING, "Wave crop range out of bounds");
@@ -1078,7 +1078,7 @@ void WaveCrop(Wave *wave, int initSample, int finalSample)
// NOTE: Returned sample values are normalized to range [-1..1]
float *GetWaveData(Wave wave)
{
- float *samples = (float *)malloc(wave.sampleCount*wave.channels*sizeof(float));
+ float *samples = (float *)RL_MALLOC(wave.sampleCount*wave.channels*sizeof(float));
for (unsigned int i = 0; i < wave.sampleCount; i++)
{
@@ -1100,7 +1100,7 @@ float *GetWaveData(Wave wave)
// Load music stream from file
Music LoadMusicStream(const char *fileName)
{
- Music music = (MusicData *)malloc(sizeof(MusicData));
+ Music music = (MusicData *)RL_MALLOC(sizeof(MusicData));
bool musicLoaded = true;
#if defined(SUPPORT_FILEFORMAT_OGG)
@@ -1228,7 +1228,7 @@ Music LoadMusicStream(const char *fileName)
if (false) {}
#endif
#if defined(SUPPORT_FILEFORMAT_FLAC)
- else if (music->ctxType == MUSIC_AUDIO_FLAC) drflac_free(music->ctxFlac);
+ else if (music->ctxType == MUSIC_AUDIO_FLAC) drflac_RL_FREE(music->ctxFlac);
#endif
#if defined(SUPPORT_FILEFORMAT_MP3)
else if (music->ctxType == MUSIC_AUDIO_MP3) drmp3_uninit(&music->ctxMp3);
@@ -1240,7 +1240,7 @@ Music LoadMusicStream(const char *fileName)
else if (music->ctxType == MUSIC_MODULE_MOD) jar_mod_unload(&music->ctxMod);
#endif
- free(music);
+ RL_FREE(music);
music = NULL;
TraceLog(LOG_WARNING, "[%s] Music file could not be opened", fileName);
@@ -1262,7 +1262,7 @@ void UnloadMusicStream(Music music)
if (false) {}
#endif
#if defined(SUPPORT_FILEFORMAT_FLAC)
- else if (music->ctxType == MUSIC_AUDIO_FLAC) drflac_free(music->ctxFlac);
+ else if (music->ctxType == MUSIC_AUDIO_FLAC) drflac_RL_FREE(music->ctxFlac);
#endif
#if defined(SUPPORT_FILEFORMAT_MP3)
else if (music->ctxType == MUSIC_AUDIO_MP3) drmp3_uninit(&music->ctxMp3);
@@ -1274,7 +1274,7 @@ void UnloadMusicStream(Music music)
else if (music->ctxType == MUSIC_MODULE_MOD) jar_mod_unload(&music->ctxMod);
#endif
- free(music);
+ RL_FREE(music);
}
// Start music playing (open stream)
@@ -1357,7 +1357,7 @@ void UpdateMusicStream(Music music)
unsigned int subBufferSizeInFrames = ((AudioBuffer *)music->stream.audioBuffer)->bufferSizeInFrames/2;
// NOTE: Using dynamic allocation because it could require more than 16KB
- void *pcm = calloc(subBufferSizeInFrames*music->stream.channels*music->stream.sampleSize/8, 1);
+ void *pcm = RL_CALLOC(subBufferSizeInFrames*music->stream.channels*music->stream.sampleSize/8, 1);
int samplesCount = 0; // Total size of data steamed in L+R samples for xm floats, individual L or R for ogg shorts
@@ -1427,7 +1427,7 @@ void UpdateMusicStream(Music music)
}
// Free allocated pcm data
- free(pcm);
+ RL_FREE(pcm);
// Reset audio stream for looping
if (streamEnding)
@@ -1750,7 +1750,7 @@ static Wave LoadWAV(const char *fileName)
else
{
// Allocate memory for data
- wave.data = malloc(wavData.subChunkSize);
+ wave.data = RL_MALLOC(wavData.subChunkSize);
// Read in the sound data into the soundData variable
fread(wave.data, wavData.subChunkSize, 1, wavFile);
@@ -1891,7 +1891,7 @@ static Wave LoadOGG(const char *fileName)
float totalSeconds = stb_vorbis_stream_length_in_seconds(oggFile);
if (totalSeconds > 10) TraceLog(LOG_WARNING, "[%s] Ogg audio length is larger than 10 seconds (%f), that's a big file in memory, consider music streaming", fileName, totalSeconds);
- wave.data = (short *)malloc(wave.sampleCount*wave.channels*sizeof(short));
+ wave.data = (short *)RL_MALLOC(wave.sampleCount*wave.channels*sizeof(short));
// NOTE: Returns the number of samples to process (be careful! we ask for number of shorts!)
int numSamplesOgg = stb_vorbis_get_samples_short_interleaved(oggFile, info.channels, (short *)wave.data, wave.sampleCount*wave.channels);
diff --git a/src/raudio.h b/src/raudio.h
index e8701814..f71a3083 100644
--- a/src/raudio.h
+++ b/src/raudio.h
@@ -56,7 +56,16 @@
//----------------------------------------------------------------------------------
// Defines and Macros
//----------------------------------------------------------------------------------
-//...
+// Allow custom memory allocators
+#ifndef RL_MALLOC
+ #define RL_MALLOC(sz) malloc(sz)
+#endif
+#ifndef RL_CALLOC
+ #define RL_CALLOC(n,sz) calloc(n,sz)
+#endif
+#ifndef RL_FREE
+ #define RL_FREE(p) free(p)
+#endif
//----------------------------------------------------------------------------------
// Types and Structures Definition
diff --git a/src/raylib.h b/src/raylib.h
index 424a9dd7..43260e06 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -99,6 +99,17 @@
// Shader and material limits
#define MAX_SHADER_LOCATIONS 32 // Maximum number of predefined locations stored in shader struct
#define MAX_MATERIAL_MAPS 12 // Maximum number of texture maps stored in shader struct
+
+// Allow custom memory allocators
+#ifndef RL_MALLOC
+ #define RL_MALLOC(sz) malloc(sz)
+#endif
+#ifndef RL_CALLOC
+ #define RL_CALLOC(n,sz) calloc(n,sz)
+#endif
+#ifndef RL_FREE
+ #define RL_FREE(p) free(p)
+#endif
// NOTE: MSC C++ compiler does not support compound literals (C99 feature)
// Plain structures in C++ (without constructors) can be initialized from { } initializers.
diff --git a/src/rlgl.h b/src/rlgl.h
index 0356858a..c2ddd028 100644
--- a/src/rlgl.h
+++ b/src/rlgl.h
@@ -1492,7 +1492,7 @@ void rlglInit(int width, int height)
glGetIntegerv(GL_NUM_EXTENSIONS, &numExt);
#if defined(_MSC_VER)
- const char **extList = malloc(sizeof(const char *)*numExt);
+ const char **extList = RL_MALLOC(sizeof(const char *)*numExt);
#else
const char *extList[numExt];
#endif
@@ -1504,7 +1504,7 @@ void rlglInit(int width, int height)
// NOTE: We have to duplicate string because glGetString() returns a const string
int len = strlen(extensions) + 1;
- char *extensionsDup = (char *)malloc(len);
+ char *extensionsDup = (char *)RL_MALLOC(len);
strcpy(extensionsDup, extensions);
// NOTE: String could be splitted using strtok() function (string.h)
@@ -1520,7 +1520,7 @@ void rlglInit(int width, int height)
extList[numExt] = strtok(NULL, " ");
}
- free(extensionsDup); // Duplicated string must be deallocated
+ RL_FREE(extensionsDup); // Duplicated string must be deallocated
numExt -= 1;
#endif
@@ -1595,7 +1595,7 @@ void rlglInit(int width, int height)
}
#if defined(_WIN32) && defined(_MSC_VER)
- free(extList);
+ RL_FREE(extList);
#endif
#if defined(GRAPHICS_API_OPENGL_ES2)
@@ -1640,7 +1640,7 @@ void rlglInit(int width, int height)
transformMatrix = MatrixIdentity();
// Init draw calls tracking system
- draws = (DrawCall *)malloc(sizeof(DrawCall)*MAX_DRAWCALL_REGISTERED);
+ draws = (DrawCall *)RL_MALLOC(sizeof(DrawCall)*MAX_DRAWCALL_REGISTERED);
for (int i = 0; i < MAX_DRAWCALL_REGISTERED; i++)
{
@@ -1710,7 +1710,7 @@ void rlglClose(void)
TraceLog(LOG_INFO, "[TEX ID %i] Unloaded texture data (base white texture) from VRAM", defaultTextureId);
- free(draws);
+ RL_FREE(draws);
#endif
}
@@ -2300,7 +2300,7 @@ void rlGenerateMipmaps(Texture2D *texture)
}
texture->mipmaps = mipmapCount + 1;
- free(data); // Once mipmaps have been generated and data has been uploaded to GPU VRAM, we can discard RAM data
+ RL_FREE(data); // Once mipmaps have been generated and data has been uploaded to GPU VRAM, we can discard RAM data
TraceLog(LOG_WARNING, "[TEX ID %i] Mipmaps [%i] generated manually on CPU side", texture->id, texture->mipmaps);
}
@@ -2735,18 +2735,18 @@ void rlDrawMesh(Mesh mesh, Material material, Matrix transform)
// Unload mesh data from CPU and GPU
void rlUnloadMesh(Mesh *mesh)
{
- free(mesh->vertices);
- free(mesh->texcoords);
- free(mesh->normals);
- free(mesh->colors);
- free(mesh->tangents);
- free(mesh->texcoords2);
- free(mesh->indices);
-
- free(mesh->animVertices);
- free(mesh->animNormals);
- free(mesh->boneWeights);
- free(mesh->boneIds);
+ RL_FREE(mesh->vertices);
+ RL_FREE(mesh->texcoords);
+ RL_FREE(mesh->normals);
+ RL_FREE(mesh->colors);
+ RL_FREE(mesh->tangents);
+ RL_FREE(mesh->texcoords2);
+ RL_FREE(mesh->indices);
+
+ RL_FREE(mesh->animVertices);
+ RL_FREE(mesh->animNormals);
+ RL_FREE(mesh->boneWeights);
+ RL_FREE(mesh->boneIds);
rlDeleteBuffers(mesh->vboId[0]); // vertex
rlDeleteBuffers(mesh->vboId[1]); // texcoords
@@ -2762,14 +2762,14 @@ void rlUnloadMesh(Mesh *mesh)
// Read screen pixel data (color buffer)
unsigned char *rlReadScreenPixels(int width, int height)
{
- unsigned char *screenData = (unsigned char *)calloc(width*height*4, sizeof(unsigned char));
+ unsigned char *screenData = (unsigned char *)RL_CALLOC(width*height*4, sizeof(unsigned char));
// NOTE 1: glReadPixels returns image flipped vertically -> (0,0) is the bottom left corner of the framebuffer
// NOTE 2: We are getting alpha channel! Be careful, it can be transparent if not cleared properly!
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, screenData);
// Flip image vertically!
- unsigned char *imgData = (unsigned char *)malloc(width*height*sizeof(unsigned char)*4);
+ unsigned char *imgData = (unsigned char *)RL_MALLOC(width*height*sizeof(unsigned char)*4);
for (int y = height - 1; y >= 0; y--)
{
@@ -2783,7 +2783,7 @@ unsigned char *rlReadScreenPixels(int width, int height)
}
}
- free(screenData);
+ RL_FREE(screenData);
return imgData; // NOTE: image data should be freed
}
@@ -2815,7 +2815,7 @@ void *rlReadTexturePixels(Texture2D texture)
if ((glInternalFormat != -1) && (texture.format < COMPRESSED_DXT1_RGB))
{
- pixels = (unsigned char *)malloc(size);
+ pixels = (unsigned char *)RL_MALLOC(size);
glGetTexImage(GL_TEXTURE_2D, 0, glFormat, glType, pixels);
}
else TraceLog(LOG_WARNING, "Texture data retrieval not suported for pixel format");
@@ -2841,7 +2841,7 @@ void *rlReadTexturePixels(Texture2D texture)
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture.id, 0);
// Allocate enough memory to read back our texture data
- pixels = (unsigned char *)malloc(GetPixelDataSize(texture.width, texture.height, texture.format));
+ pixels = (unsigned char *)RL_MALLOC(GetPixelDataSize(texture.width, texture.height, texture.format));
// Get OpenGL internal formats and data type from our texture format
unsigned int glInternalFormat, glFormat, glType;
@@ -2911,7 +2911,7 @@ char *LoadText(const char *fileName)
if (size > 0)
{
- text = (char *)malloc(sizeof(char)*(size + 1));
+ text = (char *)RL_MALLOC(sizeof(char)*(size + 1));
int count = fread(text, sizeof(char), size, textFile);
text[count] = '\0';
}
@@ -2938,8 +2938,8 @@ Shader LoadShader(const char *vsFileName, const char *fsFileName)
shader = LoadShaderCode(vShaderStr, fShaderStr);
- if (vShaderStr != NULL) free(vShaderStr);
- if (fShaderStr != NULL) free(fShaderStr);
+ if (vShaderStr != NULL) RL_FREE(vShaderStr);
+ if (fShaderStr != NULL) RL_FREE(fShaderStr);
return shader;
}
@@ -3758,7 +3758,7 @@ static unsigned int CompileShader(const char *shaderStr, int type)
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &maxLength);
#if defined(_MSC_VER)
- char *log = malloc(maxLength);
+ char *log = RL_MALLOC(maxLength);
#else
char log[maxLength];
#endif
@@ -3767,7 +3767,7 @@ static unsigned int CompileShader(const char *shaderStr, int type)
TraceLog(LOG_INFO, "%s", log);
#if defined(_MSC_VER)
- free(log);
+ RL_FREE(log);
#endif
}
else TraceLog(LOG_INFO, "[SHDR ID %i] Shader compiled successfully", shader);
@@ -3814,7 +3814,7 @@ static unsigned int LoadShaderProgram(unsigned int vShaderId, unsigned int fShad
glGetProgramiv(program, GL_INFO_LOG_LENGTH, &maxLength);
#if defined(_MSC_VER)
- char *log = malloc(maxLength);
+ char *log = RL_MALLOC(maxLength);
#else
char log[maxLength];
#endif
@@ -3823,7 +3823,7 @@ static unsigned int LoadShaderProgram(unsigned int vShaderId, unsigned int fShad
TraceLog(LOG_INFO, "%s", log);
#if defined(_MSC_VER)
- free(log);
+ RL_FREE(log);
#endif
glDeleteProgram(program);
@@ -3984,13 +3984,13 @@ static void LoadBuffersDefault(void)
//--------------------------------------------------------------------------------------------
for (int i = 0; i < MAX_BATCH_BUFFERING; i++)
{
- vertexData[i].vertices = (float *)malloc(sizeof(float)*3*4*MAX_BATCH_ELEMENTS); // 3 float by vertex, 4 vertex by quad
- vertexData[i].texcoords = (float *)malloc(sizeof(float)*2*4*MAX_BATCH_ELEMENTS); // 2 float by texcoord, 4 texcoord by quad
- vertexData[i].colors = (unsigned char *)malloc(sizeof(unsigned char)*4*4*MAX_BATCH_ELEMENTS); // 4 float by color, 4 colors by quad
+ vertexData[i].vertices = (float *)RL_MALLOC(sizeof(float)*3*4*MAX_BATCH_ELEMENTS); // 3 float by vertex, 4 vertex by quad
+ vertexData[i].texcoords = (float *)RL_MALLOC(sizeof(float)*2*4*MAX_BATCH_ELEMENTS); // 2 float by texcoord, 4 texcoord by quad
+ vertexData[i].colors = (unsigned char *)RL_MALLOC(sizeof(unsigned char)*4*4*MAX_BATCH_ELEMENTS); // 4 float by color, 4 colors by quad
#if defined(GRAPHICS_API_OPENGL_33)
- vertexData[i].indices = (unsigned int *)malloc(sizeof(unsigned int)*6*MAX_BATCH_ELEMENTS); // 6 int by quad (indices)
+ vertexData[i].indices = (unsigned int *)RL_MALLOC(sizeof(unsigned int)*6*MAX_BATCH_ELEMENTS); // 6 int by quad (indices)
#elif defined(GRAPHICS_API_OPENGL_ES2)
- vertexData[i].indices = (unsigned short *)malloc(sizeof(unsigned short)*6*MAX_BATCH_ELEMENTS); // 6 int by quad (indices)
+ vertexData[i].indices = (unsigned short *)RL_MALLOC(sizeof(unsigned short)*6*MAX_BATCH_ELEMENTS); // 6 int by quad (indices)
#endif
for (int j = 0; j < (3*4*MAX_BATCH_ELEMENTS); j++) vertexData[i].vertices[j] = 0.0f;
@@ -4266,10 +4266,10 @@ static void UnloadBuffersDefault(void)
if (vaoSupported) glDeleteVertexArrays(1, &vertexData[i].vaoId);
// Free vertex arrays memory from CPU (RAM)
- free(vertexData[i].vertices);
- free(vertexData[i].texcoords);
- free(vertexData[i].colors);
- free(vertexData[i].indices);
+ RL_FREE(vertexData[i].vertices);
+ RL_FREE(vertexData[i].texcoords);
+ RL_FREE(vertexData[i].colors);
+ RL_FREE(vertexData[i].indices);
}
}
@@ -4444,7 +4444,7 @@ static int GenerateMipmaps(unsigned char *data, int baseWidth, int baseHeight)
// Generate mipmaps
// NOTE: Every mipmap data is stored after data
- Color *image = (Color *)malloc(width*height*sizeof(Color));
+ Color *image = (Color *)RL_MALLOC(width*height*sizeof(Color));
Color *mipmap = NULL;
int offset = 0;
int j = 0;
@@ -4481,13 +4481,13 @@ static int GenerateMipmaps(unsigned char *data, int baseWidth, int baseHeight)
j++;
}
- free(image);
+ RL_FREE(image);
image = mipmap;
mipmap = NULL;
}
- free(mipmap); // free mipmap data
+ RL_FREE(mipmap); // free mipmap data
return mipmapCount;
}
@@ -4501,7 +4501,7 @@ static Color *GenNextMipmap(Color *srcData, int srcWidth, int srcHeight)
int width = srcWidth/2;
int height = srcHeight/2;
- Color *mipmap = (Color *)malloc(width*height*sizeof(Color));
+ Color *mipmap = (Color *)RL_MALLOC(width*height*sizeof(Color));
// Scaling algorithm works perfectly (box-filter)
for (int y = 0; y < height; y++)
diff --git a/src/text.c b/src/text.c
index bd9e09f0..22bd7659 100644
--- a/src/text.c
+++ b/src/text.c
@@ -174,7 +174,7 @@ extern void LoadDefaultFont(void)
int imWidth = 128;
int imHeight = 128;
- Color *imagePixels = (Color *)malloc(imWidth*imHeight*sizeof(Color));
+ Color *imagePixels = (Color *)RL_MALLOC(imWidth*imHeight*sizeof(Color));
for (int i = 0; i < imWidth*imHeight; i++) imagePixels[i] = BLANK; // Initialize array
@@ -196,7 +196,7 @@ extern void LoadDefaultFont(void)
Image image = LoadImageEx(imagePixels, imWidth, imHeight);
ImageFormat(&image, UNCOMPRESSED_GRAY_ALPHA);
- free(imagePixels);
+ RL_FREE(imagePixels);
defaultFont.texture = LoadTextureFromImage(image);
UnloadImage(image);
@@ -206,7 +206,7 @@ extern void LoadDefaultFont(void)
// Allocate space for our characters info data
// NOTE: This memory should be freed at end! --> CloseWindow()
- defaultFont.chars = (CharInfo *)malloc(defaultFont.charsCount*sizeof(CharInfo));
+ defaultFont.chars = (CharInfo *)RL_MALLOC(defaultFont.charsCount*sizeof(CharInfo));
int currentLine = 0;
int currentPosX = charsDivisor;
@@ -249,7 +249,7 @@ extern void LoadDefaultFont(void)
extern void UnloadDefaultFont(void)
{
UnloadTexture(defaultFont.texture);
- free(defaultFont.chars);
+ RL_FREE(defaultFont.chars);
}
#endif // SUPPORT_DEFAULT_FONT
@@ -407,7 +407,7 @@ Font LoadFontFromImage(Image image, Color key, int firstChar)
// Create a new image with the processed color data (key color replaced by BLANK)
Image fontClear = LoadImageEx(pixels, image.width, image.height);
- free(pixels); // Free pixels array memory
+ RL_FREE(pixels); // Free pixels array memory
// Create spritefont with all data parsed from image
Font spriteFont = { 0 };
@@ -419,7 +419,7 @@ Font LoadFontFromImage(Image image, Color key, int firstChar)
// We got tempCharValues and tempCharsRecs populated with chars data
// Now we move temp data to sized charValues and charRecs arrays
- spriteFont.chars = (CharInfo *)malloc(spriteFont.charsCount*sizeof(CharInfo));
+ spriteFont.chars = (CharInfo *)RL_MALLOC(spriteFont.charsCount*sizeof(CharInfo));
for (int i = 0; i < spriteFont.charsCount; i++)
{
@@ -466,7 +466,7 @@ CharInfo *LoadFontData(const char *fileName, int fontSize, int *fontChars, int c
long size = ftell(fontFile); // Get file size
fseek(fontFile, 0, SEEK_SET); // Reset file pointer
- unsigned char *fontBuffer = (unsigned char *)malloc(size);
+ unsigned char *fontBuffer = (unsigned char *)RL_MALLOC(size);
fread(fontBuffer, size, 1, fontFile);
fclose(fontFile);
@@ -491,12 +491,12 @@ CharInfo *LoadFontData(const char *fileName, int fontSize, int *fontChars, int c
int genFontChars = false;
if (fontChars == NULL)
{
- fontChars = (int *)malloc(charsCount*sizeof(int));
+ fontChars = (int *)RL_MALLOC(charsCount*sizeof(int));
for (int i = 0; i < charsCount; i++) fontChars[i] = i + 32;
genFontChars = true;
}
- chars = (CharInfo *)malloc(charsCount*sizeof(CharInfo));
+ chars = (CharInfo *)RL_MALLOC(charsCount*sizeof(CharInfo));
// NOTE: Using simple packaging, one char after another
for (int i = 0; i < charsCount; i++)
@@ -540,8 +540,8 @@ CharInfo *LoadFontData(const char *fileName, int fontSize, int *fontChars, int c
chars[i].advanceX *= scaleFactor;
}
- free(fontBuffer);
- if (genFontChars) free(fontChars);
+ RL_FREE(fontBuffer);
+ if (genFontChars) RL_FREE(fontChars);
}
else TraceLog(LOG_WARNING, "[%s] TTF file could not be opened", fileName);
#else
@@ -572,7 +572,7 @@ Image GenImageFontAtlas(CharInfo *chars, int charsCount, int fontSize, int paddi
atlas.width = imageSize; // Atlas bitmap width
atlas.height = imageSize; // Atlas bitmap height
- atlas.data = (unsigned char *)calloc(1, atlas.width*atlas.height); // Create a bitmap to store characters (8 bpp)
+ atlas.data = (unsigned char *)RL_CALLOC(1, atlas.width*atlas.height); // Create a bitmap to store characters (8 bpp)
atlas.format = UNCOMPRESSED_GRAYSCALE;
atlas.mipmaps = 1;
@@ -619,11 +619,11 @@ Image GenImageFontAtlas(CharInfo *chars, int charsCount, int fontSize, int paddi
{
TraceLog(LOG_DEBUG, "Using Skyline packing algorythm!");
- stbrp_context *context = (stbrp_context *)malloc(sizeof(*context));
- stbrp_node *nodes = (stbrp_node *)malloc(charsCount*sizeof(*nodes));
+ stbrp_context *context = (stbrp_context *)RL_MALLOC(sizeof(*context));
+ stbrp_node *nodes = (stbrp_node *)RL_MALLOC(charsCount*sizeof(*nodes));
stbrp_init_target(context, atlas.width, atlas.height, nodes, charsCount);
- stbrp_rect *rects = (stbrp_rect *)malloc(charsCount*sizeof(stbrp_rect));
+ stbrp_rect *rects = (stbrp_rect *)RL_MALLOC(charsCount*sizeof(stbrp_rect));
// Fill rectangles for packaging
for (int i = 0; i < charsCount; i++)
@@ -655,16 +655,16 @@ Image GenImageFontAtlas(CharInfo *chars, int charsCount, int fontSize, int paddi
else TraceLog(LOG_WARNING, "Character could not be packed: %i", i);
}
- free(rects);
- free(nodes);
- free(context);
+ RL_FREE(rects);
+ RL_FREE(nodes);
+ RL_FREE(context);
}
// TODO: Crop image if required for smaller size
// Convert image data from GRAYSCALE to GRAY_ALPHA
// WARNING: ImageAlphaMask(&atlas, atlas) does not work in this case, requires manual operation
- unsigned char *dataGrayAlpha = (unsigned char *)malloc(imageSize*imageSize*sizeof(unsigned char)*2); // Two channels
+ unsigned char *dataGrayAlpha = (unsigned char *)RL_MALLOC(imageSize*imageSize*sizeof(unsigned char)*2); // Two channels
for (int i = 0, k = 0; i < atlas.width*atlas.height; i++, k += 2)
{
@@ -672,7 +672,7 @@ Image GenImageFontAtlas(CharInfo *chars, int charsCount, int fontSize, int paddi
dataGrayAlpha[k + 1] = ((unsigned char *)atlas.data)[i];
}
- free(atlas.data);
+ RL_FREE(atlas.data);
atlas.data = dataGrayAlpha;
atlas.format = UNCOMPRESSED_GRAY_ALPHA;
@@ -688,10 +688,10 @@ void UnloadFont(Font font)
{
for (int i = 0; i < font.charsCount; i++)
{
- free(font.chars[i].data);
+ RL_FREE(font.chars[i].data);
}
UnloadTexture(font.texture);
- free(font.chars);
+ RL_FREE(font.chars);
TraceLog(LOG_DEBUG, "Unloaded sprite font data");
}
@@ -1214,7 +1214,7 @@ const char *TextReplace(char *text, const char *replace, const char *by)
for (count = 0; (temp = strstr(insertPoint, replace)); count++) insertPoint = temp + replaceLen;
// Allocate returning string and point temp to it
- temp = result = malloc(strlen(text) + (byLen - replaceLen)*count + 1);
+ temp = result = RL_MALLOC(strlen(text) + (byLen - replaceLen)*count + 1);
if (!result) return NULL; // Memory could not be allocated
@@ -1245,7 +1245,7 @@ const char *TextInsert(const char *text, const char *insert, int position)
int textLen = strlen(text);
int insertLen = strlen(insert);
- char *result = (char *)malloc(textLen + insertLen + 1);
+ char *result = (char *)RL_MALLOC(textLen + insertLen + 1);
for (int i = 0; i < position; i++) result[i] = text[i];
for (int i = position; i < insertLen + position; i++) result[i] = insert[i];
@@ -1477,7 +1477,7 @@ static Font LoadBMFont(const char *fileName)
}
// NOTE: We need some extra space to avoid memory corruption on next allocations!
- texPath = malloc(strlen(fileName) - strlen(lastSlash) + strlen(texFileName) + 4);
+ texPath = RL_MALLOC(strlen(fileName) - strlen(lastSlash) + strlen(texFileName) + 4);
// NOTE: strcat() and strncat() required a '\0' terminated string to work!
*texPath = '\0';
@@ -1501,13 +1501,13 @@ static Font LoadBMFont(const char *fileName)
else font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont);
- free(texPath);
+ RL_FREE(texPath);
// Fill font characters info data
font.baseSize = fontSize;
font.charsCount = charsCount;
- font.chars = (CharInfo *)malloc(charsCount*sizeof(CharInfo));
+ font.chars = (CharInfo *)RL_MALLOC(charsCount*sizeof(CharInfo));
int charId, charX, charY, charWidth, charHeight, charOffsetX, charOffsetY, charAdvanceX;
diff --git a/src/textures.c b/src/textures.c
index 7059fabb..eb743026 100644
--- a/src/textures.c
+++ b/src/textures.c
@@ -112,9 +112,14 @@
defined(SUPPORT_FILEFORMAT_GIF) || \
defined(SUPPORT_FILEFORMAT_PIC) || \
defined(SUPPORT_FILEFORMAT_HDR))
+
+ #define STBI_MALLOC RL_MALLOC
+ #define STBI_FREE RL_FREE
+ #define STBI_REALLOC(p,newsz) realloc(p,newsz)
+
#define STB_IMAGE_IMPLEMENTATION
- #include "external/stb_image.h" // Required for: stbi_load_from_file()
- // NOTE: Used to read image data (multiple formats support)
+ #include "external/stb_image.h" // Required for: stbi_load_from_file()
+ // NOTE: Used to read image data (multiple formats support)
#endif
#if defined(SUPPORT_IMAGE_EXPORT)
@@ -305,7 +310,7 @@ Image LoadImageEx(Color *pixels, int width, int height)
int k = 0;
- image.data = (unsigned char *)malloc(image.width*image.height*4*sizeof(unsigned char));
+ image.data = (unsigned char *)RL_MALLOC(image.width*image.height*4*sizeof(unsigned char));
for (int i = 0; i < image.width*image.height*4; i += 4)
{
@@ -353,7 +358,7 @@ Image LoadImageRaw(const char *fileName, int width, int height, int format, int
unsigned int size = GetPixelDataSize(width, height, format);
- image.data = malloc(size); // Allocate required memory in bytes
+ image.data = RL_MALLOC(size); // Allocate required memory in bytes
// NOTE: fread() returns num read elements instead of bytes,
// to get bytes we need to read (1 byte size, elements) instead of (x byte size, 1 element)
@@ -364,7 +369,7 @@ Image LoadImageRaw(const char *fileName, int width, int height, int format, int
{
TraceLog(LOG_WARNING, "[%s] RAW image data can not be read, wrong requested format or size", fileName);
- free(image.data);
+ RL_FREE(image.data);
}
else
{
@@ -425,7 +430,7 @@ RenderTexture2D LoadRenderTexture(int width, int height)
// Unload image from CPU memory (RAM)
void UnloadImage(Image image)
{
- free(image.data);
+ RL_FREE(image.data);
}
// Unload texture from GPU memory (VRAM)
@@ -448,7 +453,7 @@ void UnloadRenderTexture(RenderTexture2D target)
// Get pixel data from image in the form of Color struct array
Color *GetImageData(Image image)
{
- Color *pixels = (Color *)malloc(image.width*image.height*sizeof(Color));
+ Color *pixels = (Color *)RL_MALLOC(image.width*image.height*sizeof(Color));
if (image.format >= COMPRESSED_DXT1_RGB) TraceLog(LOG_WARNING, "Pixel data retrieval not supported for compressed image formats");
else
@@ -563,7 +568,7 @@ Color *GetImageData(Image image)
// Get pixel data from image as Vector4 array (float normalized)
Vector4 *GetImageDataNormalized(Image image)
{
- Vector4 *pixels = (Vector4 *)malloc(image.width*image.height*sizeof(Vector4));
+ Vector4 *pixels = (Vector4 *)RL_MALLOC(image.width*image.height*sizeof(Vector4));
if (image.format >= COMPRESSED_DXT1_RGB) TraceLog(LOG_WARNING, "Pixel data retrieval not supported for compressed image formats");
else
@@ -797,7 +802,7 @@ void ExportImage(Image image, const char *fileName)
fclose(rawFile);
}
- free(imgData);
+ RL_FREE(imgData);
#endif
if (success != 0) TraceLog(LOG_INFO, "Image exported successfully: %s", fileName);
@@ -863,7 +868,7 @@ Image ImageCopy(Image image)
if (height < 1) height = 1;
}
- newImage.data = malloc(size);
+ newImage.data = RL_MALLOC(size);
if (newImage.data != NULL)
{
@@ -896,7 +901,7 @@ void ImageToPOT(Image *image, Color fillColor)
Color *pixelsPOT = NULL;
// Generate POT array from NPOT data
- pixelsPOT = (Color *)malloc(potWidth*potHeight*sizeof(Color));
+ pixelsPOT = (Color *)RL_MALLOC(potWidth*potHeight*sizeof(Color));
for (int j = 0; j < potHeight; j++)
{
@@ -909,15 +914,15 @@ void ImageToPOT(Image *image, Color fillColor)
TraceLog(LOG_WARNING, "Image converted to POT: (%ix%i) -> (%ix%i)", image->width, image->height, potWidth, potHeight);
- free(pixels); // Free pixels data
- free(image->data); // Free old image data
+ RL_FREE(pixels); // Free pixels data
+ RL_FREE(image->data); // Free old image data
int format = image->format; // Store image data format to reconvert later
// NOTE: Image size changes, new width and height
*image = LoadImageEx(pixelsPOT, potWidth, potHeight);
- free(pixelsPOT); // Free POT pixels data
+ RL_FREE(pixelsPOT); // Free POT pixels data
ImageFormat(image, format); // Reconvert image to previous format
}
@@ -932,7 +937,7 @@ void ImageFormat(Image *image, int newFormat)
{
Vector4 *pixels = GetImageDataNormalized(*image); // Supports 8 to 32 bit per channel
- free(image->data); // WARNING! We loose mipmaps data --> Regenerated at the end...
+ RL_FREE(image->data); // WARNING! We loose mipmaps data --> Regenerated at the end...
image->data = NULL;
image->format = newFormat;
@@ -942,7 +947,7 @@ void ImageFormat(Image *image, int newFormat)
{
case UNCOMPRESSED_GRAYSCALE:
{
- image->data = (unsigned char *)malloc(image->width*image->height*sizeof(unsigned char));
+ image->data = (unsigned char *)RL_MALLOC(image->width*image->height*sizeof(unsigned char));
for (int i = 0; i < image->width*image->height; i++)
{
@@ -952,7 +957,7 @@ void ImageFormat(Image *image, int newFormat)
} break;
case UNCOMPRESSED_GRAY_ALPHA:
{
- image->data = (unsigned char *)malloc(image->width*image->height*2*sizeof(unsigned char));
+ image->data = (unsigned char *)RL_MALLOC(image->width*image->height*2*sizeof(unsigned char));
for (int i = 0; i < image->width*image->height*2; i += 2, k++)
{
@@ -963,7 +968,7 @@ void ImageFormat(Image *image, int newFormat)
} break;
case UNCOMPRESSED_R5G6B5:
{
- image->data = (unsigned short *)malloc(image->width*image->height*sizeof(unsigned short));
+ image->data = (unsigned short *)RL_MALLOC(image->width*image->height*sizeof(unsigned short));
unsigned char r = 0;
unsigned char g = 0;
@@ -981,7 +986,7 @@ void ImageFormat(Image *image, int newFormat)
} break;
case UNCOMPRESSED_R8G8B8:
{
- image->data = (unsigned char *)malloc(image->width*image->height*3*sizeof(unsigned char));
+ image->data = (unsigned char *)RL_MALLOC(image->width*image->height*3*sizeof(unsigned char));
for (int i = 0, k = 0; i < image->width*image->height*3; i += 3, k++)
{
@@ -994,7 +999,7 @@ void ImageFormat(Image *image, int newFormat)
{
#define ALPHA_THRESHOLD 50
- image->data = (unsigned short *)malloc(image->width*image->height*sizeof(unsigned short));
+ image->data = (unsigned short *)RL_MALLOC(image->width*image->height*sizeof(unsigned short));
unsigned char r = 0;
unsigned char g = 0;
@@ -1014,7 +1019,7 @@ void ImageFormat(Image *image, int newFormat)
} break;
case UNCOMPRESSED_R4G4B4A4:
{
- image->data = (unsigned short *)malloc(image->width*image->height*sizeof(unsigned short));
+ image->data = (unsigned short *)RL_MALLOC(image->width*image->height*sizeof(unsigned short));
unsigned char r = 0;
unsigned char g = 0;
@@ -1034,7 +1039,7 @@ void ImageFormat(Image *image, int newFormat)
} break;
case UNCOMPRESSED_R8G8B8A8:
{
- image->data = (unsigned char *)malloc(image->width*image->height*4*sizeof(unsigned char));
+ image->data = (unsigned char *)RL_MALLOC(image->width*image->height*4*sizeof(unsigned char));
for (int i = 0, k = 0; i < image->width*image->height*4; i += 4, k++)
{
@@ -1048,7 +1053,7 @@ void ImageFormat(Image *image, int newFormat)
{
// WARNING: Image is converted to GRAYSCALE eqeuivalent 32bit
- image->data = (float *)malloc(image->width*image->height*sizeof(float));
+ image->data = (float *)RL_MALLOC(image->width*image->height*sizeof(float));
for (int i = 0; i < image->width*image->height; i++)
{
@@ -1057,7 +1062,7 @@ void ImageFormat(Image *image, int newFormat)
} break;
case UNCOMPRESSED_R32G32B32:
{
- image->data = (float *)malloc(image->width*image->height*3*sizeof(float));
+ image->data = (float *)RL_MALLOC(image->width*image->height*3*sizeof(float));
for (int i = 0, k = 0; i < image->width*image->height*3; i += 3, k++)
{
@@ -1068,7 +1073,7 @@ void ImageFormat(Image *image, int newFormat)
} break;
case UNCOMPRESSED_R32G32B32A32:
{
- image->data = (float *)malloc(image->width*image->height*4*sizeof(float));
+ image->data = (float *)RL_MALLOC(image->width*image->height*4*sizeof(float));
for (int i = 0, k = 0; i < image->width*image->height*4; i += 4, k++)
{
@@ -1081,7 +1086,7 @@ void ImageFormat(Image *image, int newFormat)
default: break;
}
- free(pixels);
+ RL_FREE(pixels);
pixels = NULL;
// In case original image had mipmaps, generate mipmaps for formated image
@@ -1286,7 +1291,7 @@ void ImageCrop(Image *image, Rectangle crop)
{
// Start the cropping process
Color *pixels = GetImageData(*image); // Get data as Color pixels array
- Color *cropPixels = (Color *)malloc((int)crop.width*(int)crop.height*sizeof(Color));
+ Color *cropPixels = (Color *)RL_MALLOC((int)crop.width*(int)crop.height*sizeof(Color));
for (int j = (int)crop.y; j < (int)(crop.y + crop.height); j++)
{
@@ -1296,7 +1301,7 @@ void ImageCrop(Image *image, Rectangle crop)
}
}
- free(pixels);
+ RL_FREE(pixels);
int format = image->format;
@@ -1304,7 +1309,7 @@ void ImageCrop(Image *image, Rectangle crop)
*image = LoadImageEx(cropPixels, (int)crop.width, (int)crop.height);
- free(cropPixels);
+ RL_FREE(cropPixels);
// Reformat 32bit RGBA image to original format
ImageFormat(image, format);
@@ -1341,7 +1346,7 @@ void ImageAlphaCrop(Image *image, float threshold)
Rectangle crop = { xMin, yMin, (xMax + 1) - xMin, (yMax + 1) - yMin };
- free(pixels);
+ RL_FREE(pixels);
// Check for not empty image brefore cropping
if (!((xMax < xMin) || (yMax < yMin))) ImageCrop(image, crop);
@@ -1355,7 +1360,7 @@ void ImageResize(Image *image, int newWidth, int newHeight)
{
// Get data as Color pixels array to work with it
Color *pixels = GetImageData(*image);
- Color *output = (Color *)malloc(newWidth*newHeight*sizeof(Color));
+ Color *output = (Color *)RL_MALLOC(newWidth*newHeight*sizeof(Color));
// NOTE: Color data is casted to (unsigned char *), there shouldn't been any problem...
stbir_resize_uint8((unsigned char *)pixels, image->width, image->height, 0, (unsigned char *)output, newWidth, newHeight, 0, 4);
@@ -1367,15 +1372,15 @@ void ImageResize(Image *image, int newWidth, int newHeight)
*image = LoadImageEx(output, newWidth, newHeight);
ImageFormat(image, format); // Reformat 32bit RGBA image to original format
- free(output);
- free(pixels);
+ RL_FREE(output);
+ RL_FREE(pixels);
}
// Resize and image to new size using Nearest-Neighbor scaling algorithm
void ImageResizeNN(Image *image,int newWidth,int newHeight)
{
Color *pixels = GetImageData(*image);
- Color *output = (Color *)malloc(newWidth*newHeight*sizeof(Color));
+ Color *output = (Color *)RL_MALLOC(newWidth*newHeight*sizeof(Color));
// EDIT: added +1 to account for an early rounding problem
int xRatio = (int)((image->width << 16)/newWidth) + 1;
@@ -1400,8 +1405,8 @@ void ImageResizeNN(Image *image,int newWidth,int newHeight)
*image = LoadImageEx(output, newWidth, newHeight);
ImageFormat(image, format); // Reformat 32bit RGBA image to original format
- free(output);
- free(pixels);
+ RL_FREE(output);
+ RL_FREE(pixels);
}
// Resize canvas and fill with color
@@ -1555,7 +1560,7 @@ void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp)
{
Color *pixels = GetImageData(*image);
- free(image->data); // free old image data
+ RL_FREE(image->data); // free old image data
if ((image->format != UNCOMPRESSED_R8G8B8) && (image->format != UNCOMPRESSED_R8G8B8A8))
{
@@ -1573,7 +1578,7 @@ void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp)
}
// NOTE: We will store the dithered data as unsigned short (16bpp)
- image->data = (unsigned short *)malloc(image->width*image->height*sizeof(unsigned short));
+ image->data = (unsigned short *)RL_MALLOC(image->width*image->height*sizeof(unsigned short));
Color oldPixel = WHITE;
Color newPixel = WHITE;
@@ -1641,7 +1646,7 @@ void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp)
}
}
- free(pixels);
+ RL_FREE(pixels);
}
}
@@ -1652,7 +1657,7 @@ Color *ImageExtractPalette(Image image, int maxPaletteSize, int *extractCount)
#define COLOR_EQUAL(col1, col2) ((col1.r == col2.r)&&(col1.g == col2.g)&&(col1.b == col2.b)&&(col1.a == col2.a))
Color *pixels = GetImageData(image);
- Color *palette = (Color *)malloc(maxPaletteSize*sizeof(Color));
+ Color *palette = (Color *)RL_MALLOC(maxPaletteSize*sizeof(Color));
int palCount = 0;
for (int i = 0; i < maxPaletteSize; i++) palette[i] = BLANK; // Set all colors to BLANK
@@ -1689,7 +1694,7 @@ Color *ImageExtractPalette(Image image, int maxPaletteSize, int *extractCount)
}
}
- free(pixels);
+ RL_FREE(pixels);
*extractCount = palCount;
@@ -1799,8 +1804,8 @@ void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec)
*dst = LoadImageEx(dstPixels, (int)dst->width, (int)dst->height);
ImageFormat(dst, dst->format);
- free(srcPixels);
- free(dstPixels);
+ RL_FREE(srcPixels);
+ RL_FREE(dstPixels);
}
// Create an image from text (default font)
@@ -1933,7 +1938,7 @@ void ImageDrawTextEx(Image *dst, Vector2 position, Font font, const char *text,
void ImageFlipVertical(Image *image)
{
Color *srcPixels = GetImageData(*image);
- Color *dstPixels = (Color *)malloc(image->width*image->height*sizeof(Color));
+ Color *dstPixels = (Color *)RL_MALLOC(image->width*image->height*sizeof(Color));
for (int y = 0; y < image->height; y++)
{
@@ -1947,8 +1952,8 @@ void ImageFlipVertical(Image *image)
ImageFormat(&processed, image->format);
UnloadImage(*image);
- free(srcPixels);
- free(dstPixels);
+ RL_FREE(srcPixels);
+ RL_FREE(dstPixels);
image->data = processed.data;
}
@@ -1957,7 +1962,7 @@ void ImageFlipVertical(Image *image)
void ImageFlipHorizontal(Image *image)
{
Color *srcPixels = GetImageData(*image);
- Color *dstPixels = (Color *)malloc(image->width*image->height*sizeof(Color));
+ Color *dstPixels = (Color *)RL_MALLOC(image->width*image->height*sizeof(Color));
for (int y = 0; y < image->height; y++)
{
@@ -1971,8 +1976,8 @@ void ImageFlipHorizontal(Image *image)
ImageFormat(&processed, image->format);
UnloadImage(*image);
- free(srcPixels);
- free(dstPixels);
+ RL_FREE(srcPixels);
+ RL_FREE(dstPixels);
image->data = processed.data;
}
@@ -1981,7 +1986,7 @@ void ImageFlipHorizontal(Image *image)
void ImageRotateCW(Image *image)
{
Color *srcPixels = GetImageData(*image);
- Color *rotPixels = (Color *)malloc(image->width*image->height*sizeof(Color));
+ Color *rotPixels = (Color *)RL_MALLOC(image->width*image->height*sizeof(Color));
for (int y = 0; y < image->height; y++)
{
@@ -1995,8 +2000,8 @@ void ImageRotateCW(Image *image)
ImageFormat(&processed, image->format);
UnloadImage(*image);
- free(srcPixels);
- free(rotPixels);
+ RL_FREE(srcPixels);
+ RL_FREE(rotPixels);
image->data = processed.data;
image->width = processed.width;
@@ -2007,7 +2012,7 @@ void ImageRotateCW(Image *image)
void ImageRotateCCW(Image *image)
{
Color *srcPixels = GetImageData(*image);
- Color *rotPixels = (Color *)malloc(image->width*image->height*sizeof(Color));
+ Color *rotPixels = (Color *)RL_MALLOC(image->width*image->height*sizeof(Color));
for (int y = 0; y < image->height; y++)
{
@@ -2021,8 +2026,8 @@ void ImageRotateCCW(Image *image)
ImageFormat(&processed, image->format);
UnloadImage(*image);
- free(srcPixels);
- free(rotPixels);
+ RL_FREE(srcPixels);
+ RL_FREE(rotPixels);
image->data = processed.data;
image->width = processed.width;
@@ -2059,7 +2064,7 @@ void ImageColorTint(Image *image, Color color)
Image processed = LoadImageEx(pixels, image->width, image->height);
ImageFormat(&processed, image->format);
UnloadImage(*image);
- free(pixels);
+ RL_FREE(pixels);
image->data = processed.data;
}
@@ -2082,7 +2087,7 @@ void ImageColorInvert(Image *image)
Image processed = LoadImageEx(pixels, image->width, image->height);
ImageFormat(&processed, image->format);
UnloadImage(*image);
- free(pixels);
+ RL_FREE(pixels);
image->data = processed.data;
}
@@ -2142,7 +2147,7 @@ void ImageColorContrast(Image *image, float contrast)
Image processed = LoadImageEx(pixels, image->width, image->height);
ImageFormat(&processed, image->format);
UnloadImage(*image);
- free(pixels);
+ RL_FREE(pixels);
image->data = processed.data;
}
@@ -2182,7 +2187,7 @@ void ImageColorBrightness(Image *image, int brightness)
Image processed = LoadImageEx(pixels, image->width, image->height);
ImageFormat(&processed, image->format);
UnloadImage(*image);
- free(pixels);
+ RL_FREE(pixels);
image->data = processed.data;
}
@@ -2212,7 +2217,7 @@ void ImageColorReplace(Image *image, Color color, Color replace)
Image processed = LoadImageEx(pixels, image->width, image->height);
ImageFormat(&processed, image->format);
UnloadImage(*image);
- free(pixels);
+ RL_FREE(pixels);
image->data = processed.data;
}
@@ -2221,13 +2226,13 @@ void ImageColorReplace(Image *image, Color color, Color replace)
// Generate image: plain color
Image GenImageColor(int width, int height, Color color)
{
- Color *pixels = (Color *)calloc(width*height, sizeof(Color));
+ Color *pixels = (Color *)RL_CALLOC(width*height, sizeof(Color));
for (int i = 0; i < width*height; i++) pixels[i] = color;
Image image = LoadImageEx(pixels, width, height);
- free(pixels);
+ RL_FREE(pixels);
return image;
}
@@ -2236,7 +2241,7 @@ Image GenImageColor(int width, int height, Color color)
// Generate image: vertical gradient
Image GenImageGradientV(int width, int height, Color top, Color bottom)
{
- Color *pixels = (Color *)malloc(width*height*sizeof(Color));
+ Color *pixels = (Color *)RL_MALLOC(width*height*sizeof(Color));
for (int j = 0; j < height; j++)
{
@@ -2251,7 +2256,7 @@ Image GenImageGradientV(int width, int height, Color top, Color bottom)
}
Image image = LoadImageEx(pixels, width, height);
- free(pixels);
+ RL_FREE(pixels);
return image;
}
@@ -2259,7 +2264,7 @@ Image GenImageGradientV(int width, int height, Color top, Color bottom)
// Generate image: horizontal gradient
Image GenImageGradientH(int width, int height, Color left, Color right)
{
- Color *pixels = (Color *)malloc(width*height*sizeof(Color));
+ Color *pixels = (Color *)RL_MALLOC(width*height*sizeof(Color));
for (int i = 0; i < width; i++)
{
@@ -2274,7 +2279,7 @@ Image GenImageGradientH(int width, int height, Color left, Color right)
}
Image image = LoadImageEx(pixels, width, height);
- free(pixels);
+ RL_FREE(pixels);
return image;
}
@@ -2282,7 +2287,7 @@ Image GenImageGradientH(int width, int height, Color left, Color right)
// Generate image: radial gradient
Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer)
{
- Color *pixels = (Color *)malloc(width*height*sizeof(Color));
+ Color *pixels = (Color *)RL_MALLOC(width*height*sizeof(Color));
float radius = (width < height)? (float)width/2.0f : (float)height/2.0f;
float centerX = (float)width/2.0f;
@@ -2306,7 +2311,7 @@ Image GenImageGradientRadial(int width, int height, float density, Color inner,
}
Image image = LoadImageEx(pixels, width, height);
- free(pixels);
+ RL_FREE(pixels);
return image;
}
@@ -2314,7 +2319,7 @@ Image GenImageGradientRadial(int width, int height, float density, Color inner,
// Generate image: checked
Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2)
{
- Color *pixels = (Color *)malloc(width*height*sizeof(Color));
+ Color *pixels = (Color *)RL_MALLOC(width*height*sizeof(Color));
for (int y = 0; y < height; y++)
{
@@ -2326,7 +2331,7 @@ Image GenImageChecked(int width, int height, int checksX, int checksY, Color col
}
Image image = LoadImageEx(pixels, width, height);
- free(pixels);
+ RL_FREE(pixels);
return image;
}
@@ -2334,7 +2339,7 @@ Image GenImageChecked(int width, int height, int checksX, int checksY, Color col
// Generate image: white noise
Image GenImageWhiteNoise(int width, int height, float factor)
{
- Color *pixels = (Color *)malloc(width*height*sizeof(Color));
+ Color *pixels = (Color *)RL_MALLOC(width*height*sizeof(Color));
for (int i = 0; i < width*height; i++)
{
@@ -2343,7 +2348,7 @@ Image GenImageWhiteNoise(int width, int height, float factor)
}
Image image = LoadImageEx(pixels, width, height);
- free(pixels);
+ RL_FREE(pixels);
return image;
}
@@ -2351,7 +2356,7 @@ Image GenImageWhiteNoise(int width, int height, float factor)
// Generate image: perlin noise
Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale)
{
- Color *pixels = (Color *)malloc(width*height*sizeof(Color));
+ Color *pixels = (Color *)RL_MALLOC(width*height*sizeof(Color));
for (int y = 0; y < height; y++)
{
@@ -2374,7 +2379,7 @@ Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float
}
Image image = LoadImageEx(pixels, width, height);
- free(pixels);
+ RL_FREE(pixels);
return image;
}
@@ -2382,13 +2387,13 @@ Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float
// Generate image: cellular algorithm. Bigger tileSize means bigger cells
Image GenImageCellular(int width, int height, int tileSize)
{
- Color *pixels = (Color *)malloc(width*height*sizeof(Color));
+ Color *pixels = (Color *)RL_MALLOC(width*height*sizeof(Color));
int seedsPerRow = width/tileSize;
int seedsPerCol = height/tileSize;
int seedsCount = seedsPerRow * seedsPerCol;
- Vector2 *seeds = (Vector2 *)malloc(seedsCount*sizeof(Vector2));
+ Vector2 *seeds = (Vector2 *)RL_MALLOC(seedsCount*sizeof(Vector2));
for (int i = 0; i < seedsCount; i++)
{
@@ -2431,10 +2436,10 @@ Image GenImageCellular(int width, int height, int tileSize)
}
}
- free(seeds);
+ RL_FREE(seeds);
Image image = LoadImageEx(pixels, width, height);
- free(pixels);
+ RL_FREE(pixels);
return image;
}
@@ -2921,7 +2926,7 @@ static Image LoadDDS(const char *fileName)
{
if (ddsHeader.ddspf.flags == 0x40) // no alpha channel
{
- image.data = (unsigned short *)malloc(image.width*image.height*sizeof(unsigned short));
+ image.data = (unsigned short *)RL_MALLOC(image.width*image.height*sizeof(unsigned short));
fread(image.data, image.width*image.height*sizeof(unsigned short), 1, ddsFile);
image.format = UNCOMPRESSED_R5G6B5;
@@ -2930,7 +2935,7 @@ static Image LoadDDS(const char *fileName)
{
if (ddsHeader.ddspf.aBitMask == 0x8000) // 1bit alpha
{
- image.data = (unsigned short *)malloc(image.width*image.height*sizeof(unsigned short));
+ image.data = (unsigned short *)RL_MALLOC(image.width*image.height*sizeof(unsigned short));
fread(image.data, image.width*image.height*sizeof(unsigned short), 1, ddsFile);
unsigned char alpha = 0;
@@ -2947,7 +2952,7 @@ static Image LoadDDS(const char *fileName)
}
else if (ddsHeader.ddspf.aBitMask == 0xf000) // 4bit alpha
{
- image.data = (unsigned short *)malloc(image.width*image.height*sizeof(unsigned short));
+ image.data = (unsigned short *)RL_MALLOC(image.width*image.height*sizeof(unsigned short));
fread(image.data, image.width*image.height*sizeof(unsigned short), 1, ddsFile);
unsigned char alpha = 0;
@@ -2967,14 +2972,14 @@ static Image LoadDDS(const char *fileName)
if (ddsHeader.ddspf.flags == 0x40 && ddsHeader.ddspf.rgbBitCount == 24) // DDS_RGB, no compressed
{
// NOTE: not sure if this case exists...
- image.data = (unsigned char *)malloc(image.width*image.height*3*sizeof(unsigned char));
+ image.data = (unsigned char *)RL_MALLOC(image.width*image.height*3*sizeof(unsigned char));
fread(image.data, image.width*image.height*3, 1, ddsFile);
image.format = UNCOMPRESSED_R8G8B8;
}
else if (ddsHeader.ddspf.flags == 0x41 && ddsHeader.ddspf.rgbBitCount == 32) // DDS_RGBA, no compressed
{
- image.data = (unsigned char *)malloc(image.width*image.height*4*sizeof(unsigned char));
+ image.data = (unsigned char *)RL_MALLOC(image.width*image.height*4*sizeof(unsigned char));
fread(image.data, image.width*image.height*4, 1, ddsFile);
unsigned char blue = 0;
@@ -3001,7 +3006,7 @@ static Image LoadDDS(const char *fileName)
TraceLog(LOG_DEBUG, "Pitch or linear size: %i", ddsHeader.pitchOrLinearSize);
- image.data = (unsigned char *)malloc(size*sizeof(unsigned char));
+ image.data = (unsigned char *)RL_MALLOC(size*sizeof(unsigned char));
fread(image.data, size, 1, ddsFile);
@@ -3098,7 +3103,7 @@ static Image LoadPKM(const char *fileName)
int size = image.width*image.height*bpp/8; // Total data size in bytes
- image.data = (unsigned char *)malloc(size*sizeof(unsigned char));
+ image.data = (unsigned char *)RL_MALLOC(size*sizeof(unsigned char));
fread(image.data, size, 1, pkmFile);
@@ -3192,7 +3197,7 @@ static Image LoadKTX(const char *fileName)
int dataSize;
fread(&dataSize, sizeof(unsigned int), 1, ktxFile);
- image.data = (unsigned char *)malloc(dataSize*sizeof(unsigned char));
+ image.data = (unsigned char *)RL_MALLOC(dataSize*sizeof(unsigned char));
fread(image.data, dataSize, 1, ktxFile);
@@ -3441,7 +3446,7 @@ static Image LoadPVR(const char *fileName)
}
int dataSize = image.width*image.height*bpp/8; // Total data size in bytes
- image.data = (unsigned char *)malloc(dataSize*sizeof(unsigned char));
+ image.data = (unsigned char *)RL_MALLOC(dataSize*sizeof(unsigned char));
// Read data from file
fread(image.data, dataSize, 1, pvrFile);
@@ -3518,7 +3523,7 @@ static Image LoadASTC(const char *fileName)
{
int dataSize = image.width*image.height*bpp/8; // Data size in bytes
- image.data = (unsigned char *)malloc(dataSize*sizeof(unsigned char));
+ image.data = (unsigned char *)RL_MALLOC(dataSize*sizeof(unsigned char));
fread(image.data, dataSize, 1, astcFile);
if (bpp == 8) image.format = COMPRESSED_ASTC_4x4_RGBA;
diff --git a/src/utils.c b/src/utils.c
index 10cce9b9..3cff472b 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -45,10 +45,10 @@
#include <android/asset_manager.h> // Required for: Android assets manager: AAsset, AAssetManager_open(), ...
#endif
-#include <stdlib.h> // Required for: malloc(), free()
-#include <stdio.h> // Required for: fopen(), fclose(), fputc(), fwrite(), printf(), fprintf(), funopen()
+#include <stdlib.h> // Required for: exit()
+#include <stdio.h> // Required for: printf(), sprintf()
#include <stdarg.h> // Required for: va_list, va_start(), vfprintf(), va_end()
-#include <string.h> // Required for: strlen(), strrchr(), strcmp()
+#include <string.h> // Required for: strcpy(), strcat()
#define MAX_TRACELOG_BUFFER_SIZE 128 // Max length of one trace-log message