aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorraysan5 <raysan5@gmail.com>2016-03-01 15:36:45 +0100
committerraysan5 <raysan5@gmail.com>2016-03-01 15:36:45 +0100
commit04caf1c26285ecbb3321e9b06a216bef83731eeb (patch)
tree095e853255cb2813a8aed84d58677e248bdd9eb7 /src
parent0dfc7fffff68b0bfafd30a86fb322073daf7fc0e (diff)
downloadraylib-04caf1c26285ecbb3321e9b06a216bef83731eeb.tar.gz
raylib-04caf1c26285ecbb3321e9b06a216bef83731eeb.zip
Corrected memory leak
Diffstat (limited to 'src')
-rw-r--r--src/rlgl.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/rlgl.c b/src/rlgl.c
index 8ea7d0f2..7616c1a4 100644
--- a/src/rlgl.c
+++ b/src/rlgl.c
@@ -1892,9 +1892,9 @@ void rlglGenerateMipmaps(Texture2D texture)
void *data = rlglReadTexturePixels(texture);
// NOTE: data size is reallocated to fit mipmaps data
+ // NOTE: CPU mipmap generation only supports RGBA 32bit data
int mipmapCount = GenerateMipmaps(data, texture.width, texture.height);
- // TODO: Adjust mipmap size depending on texture format!
int size = texture.width*texture.height*4; // RGBA 32bit only
int offset = size;
@@ -1915,6 +1915,9 @@ void rlglGenerateMipmaps(Texture2D texture)
TraceLog(WARNING, "[TEX ID %i] Mipmaps generated manually on CPU side", texture.id);
+ // NOTE: Once mipmaps have been generated and data has been uploaded to GPU VRAM, we can discard RAM data
+ free(data):
+
#elif defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
glGenerateMipmap(GL_TEXTURE_2D); // Generate mipmaps automatically
TraceLog(INFO, "[TEX ID %i] Mipmaps generated automatically", texture.id);
@@ -1924,7 +1927,7 @@ void rlglGenerateMipmaps(Texture2D texture)
#endif
}
else TraceLog(WARNING, "[TEX ID %i] Mipmaps can not be generated", texture.id);
-
+
glBindTexture(GL_TEXTURE_2D, 0);
}
@@ -3106,7 +3109,7 @@ static int GenerateMipmaps(unsigned char *data, int baseWidth, int baseHeight)
int mipmapCount = 1; // Required mipmap levels count (including base level)
int width = baseWidth;
int height = baseHeight;
- int size = baseWidth*baseHeight*4; // Size in bytes (will include mipmaps...)
+ int size = baseWidth*baseHeight*4; // Size in bytes (will include mipmaps...), RGBA only
// Count mipmap levels required
while ((width != 1) && (height != 1))