|
@@ -1456,11 +1456,23 @@ void rlDeleteTextures(unsigned int id)
|
|
void rlDeleteRenderTextures(RenderTexture2D target)
|
|
void rlDeleteRenderTextures(RenderTexture2D target)
|
|
{
|
|
{
|
|
#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) && defined(SUPPORT_RENDER_TEXTURES_HINT)
|
|
#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) && defined(SUPPORT_RENDER_TEXTURES_HINT)
|
|
- if (target.texture.id > 0) glDeleteTextures(1, &target.texture.id);
|
|
|
|
|
|
+ if (target.texture.id > 0)
|
|
|
|
+ {
|
|
|
|
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0); // Detach texture from FBO
|
|
|
|
+ glDeleteTextures(1, &target.texture.id);
|
|
|
|
+ }
|
|
if (target.depth.id > 0)
|
|
if (target.depth.id > 0)
|
|
{
|
|
{
|
|
- if (target.depthTexture) glDeleteTextures(1, &target.depth.id);
|
|
|
|
- else glDeleteRenderbuffers(1, &target.depth.id);
|
|
|
|
|
|
+ if (target.depthTexture)
|
|
|
|
+ {
|
|
|
|
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, 0, 0);
|
|
|
|
+ glDeleteTextures(1, &target.depth.id);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0);
|
|
|
|
+ glDeleteRenderbuffers(1, &target.depth.id);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
if (target.id > 0) glDeleteFramebuffers(1, &target.id);
|
|
if (target.id > 0) glDeleteFramebuffers(1, &target.id);
|
|
@@ -1483,8 +1495,12 @@ void rlDeleteVertexArrays(unsigned int id)
|
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
|
if (RLGL.ExtSupported.vao)
|
|
if (RLGL.ExtSupported.vao)
|
|
{
|
|
{
|
|
- if (id != 0) glDeleteVertexArrays(1, &id);
|
|
|
|
- TRACELOG(LOG_INFO, "VAO: [ID %i] Unloaded vertex data from VRAM (GPU)", id);
|
|
|
|
|
|
+ if (id != 0)
|
|
|
|
+ {
|
|
|
|
+ glBindVertexArray(0);
|
|
|
|
+ glDeleteVertexArrays(1, &id);
|
|
|
|
+ TRACELOG(LOG_INFO, "VAO: [ID %i] Unloaded vertex data from VRAM (GPU)", id);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
@@ -3094,8 +3110,18 @@ Shader LoadShaderCode(const char *vsCode, const char *fsCode)
|
|
{
|
|
{
|
|
shader.id = LoadShaderProgram(vertexShaderId, fragmentShaderId);
|
|
shader.id = LoadShaderProgram(vertexShaderId, fragmentShaderId);
|
|
|
|
|
|
- if (vertexShaderId != RLGL.State.defaultVShaderId) glDeleteShader(vertexShaderId);
|
|
|
|
- if (fragmentShaderId != RLGL.State.defaultFShaderId) glDeleteShader(fragmentShaderId);
|
|
|
|
|
|
+ if (vertexShaderId != RLGL.State.defaultVShaderId)
|
|
|
|
+ {
|
|
|
|
+ // Detach shader before deletion to make sure memory is freed
|
|
|
|
+ glDetachShader(shader.id, vertexShaderId);
|
|
|
|
+ glDeleteShader(vertexShaderId);
|
|
|
|
+ }
|
|
|
|
+ if (fragmentShaderId != RLGL.State.defaultFShaderId)
|
|
|
|
+ {
|
|
|
|
+ // Detach shader before deletion to make sure memory is freed
|
|
|
|
+ glDetachShader(shader.id, fragmentShaderId);
|
|
|
|
+ glDeleteShader(fragmentShaderId);
|
|
|
|
+ }
|
|
|
|
|
|
if (shader.id == 0)
|
|
if (shader.id == 0)
|
|
{
|
|
{
|