From 222dd346fbe545619197a826a47aab0e5caf4745 Mon Sep 17 00:00:00 2001 From: Redacted Date: Mon, 27 May 2024 20:48:22 -0400 Subject: [PATCH] Fix memleak --- src/JGL/JGL.cpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/JGL/JGL.cpp b/src/JGL/JGL.cpp index 56c2fd1..35ac49e 100644 --- a/src/JGL/JGL.cpp +++ b/src/JGL/JGL.cpp @@ -11,7 +11,6 @@ GLuint program; -GLuint texture; namespace JGL { @@ -152,17 +151,17 @@ namespace JGL FT_Set_Pixel_Sizes(face, 0, size); - const char* c; - for (c = text.c_str(); *c; c++) + GLuint textures[text.size()]; + for (int i = 0; i < text.length(); i++) { - if (FT_Load_Char(face, *c, FT_LOAD_RENDER)) + if (FT_Load_Char(face, text.c_str()[i], FT_LOAD_RENDER)) continue; FT_GlyphSlot g = face->glyph; glActiveTexture(GL_TEXTURE0); - glGenTextures(1, &texture); - glBindTexture(GL_TEXTURE_2D, texture); + glGenTextures(1, &textures[i]); + glBindTexture(GL_TEXTURE_2D, textures[i]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); @@ -200,8 +199,9 @@ namespace JGL x += (g->advance.x >> 6) * scale; y += (g->advance.y >> 6) * scale; - } + for (auto& t : textures) + glDeleteTextures(1, &t); glBindTexture(GL_TEXTURE_2D, 0); // Unbind texture } } @@ -211,7 +211,6 @@ namespace JGL { void DrawLine3D(const Color3& color, const Vector3& A, const Vector3& B, float thickness) { - glBegin(GL_LINES); glLineWidth(thickness); glColor3f(color.r/255.f, color.g/255.f, color.b/255.f); @@ -226,23 +225,24 @@ namespace JGL float y = pos.y; float z = pos.z; GLfloat currentColor[4]; + GLuint textures[text.size()]; glGetFloatv(GL_CURRENT_COLOR, currentColor); glUseProgram(0); // Fixed-function pipeline. glColor4f(color.r, color.g, color.b, 1.0f); FT_Set_Pixel_Sizes(face, 0, size); - const char* c; - for (c = text.c_str(); *c; c++) + //for (c = text.c_str(); *c; c++) + for (int i = 0; i < text.length(); i++) { - if (FT_Load_Char(face, *c, FT_LOAD_RENDER)) + if (FT_Load_Char(face, text.c_str()[i], FT_LOAD_RENDER)) continue; FT_GlyphSlot g = face->glyph; glActiveTexture(GL_TEXTURE0); - glGenTextures(1, &texture); - glBindTexture(GL_TEXTURE_2D, texture); + glGenTextures(1, &textures[i]); + glBindTexture(GL_TEXTURE_2D, textures[i]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); @@ -283,6 +283,10 @@ namespace JGL y += (g->advance.y >> 6) * scale; } + + for (auto& t : textures) + glDeleteTextures(1, &t); + glBindTexture(GL_TEXTURE_2D, 0); // Unbind texture glColor4f(currentColor[0], currentColor[1], currentColor[2], currentColor[3]); //Set draw color back to whatever it was before. }