summaryrefslogtreecommitdiffhomepage
path: root/src/rlgl.h
diff options
context:
space:
mode:
authorRay <[email protected]>2019-04-23 14:55:35 +0200
committerRay <[email protected]>2019-04-23 14:55:35 +0200
commite67ebabb02c1068d6e7f5107dcff5388ede3faa5 (patch)
tree40820768bec18bc682038f29d6dee6d85fc0e3c9 /src/rlgl.h
parent8ed71b9d5a90ccca5551aaf069318e3c8b4a87e6 (diff)
downloadraylib-e67ebabb02c1068d6e7f5107dcff5388ede3faa5.tar.gz
raylib-e67ebabb02c1068d6e7f5107dcff5388ede3faa5.zip
Support custom memory management macros
Users can define their custom memory management macros. NOTE: Most external libraries support custom macros in the same way, raylib should redefine those macros to raylib ones, to unify custom memory loading. That redefinition is only implemented as example for stb_image.h in [textures] module.
Diffstat (limited to 'src/rlgl.h')
-rw-r--r--src/rlgl.h88
1 files changed, 44 insertions, 44 deletions
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++)