diff --git a/src/render/opengles2/SDL_render_gles2.c b/src/render/opengles2/SDL_render_gles2.c
index fc3a9d31fcb872b391a72f67d03bf28bc27750b7..46f6933f028f20f2c754dd1ecd43f29a618410c9 100644
--- a/src/render/opengles2/SDL_render_gles2.c
+++ b/src/render/opengles2/SDL_render_gles2.c
@@ -190,24 +190,34 @@ static void
 GLES2_DestroyRenderer(SDL_Renderer *renderer)
 {
     GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata;
-    GLES2_ProgramCacheEntry *entry;
-    GLES2_ProgramCacheEntry *next;
 
     /* Deallocate everything */
     if (rdata) {
         GLES2_ActivateRenderer(renderer);
 
-        entry = rdata->program_cache.head;
-        while (entry) {
-            glDeleteShader(entry->vertex_shader->id);
-            glDeleteShader(entry->fragment_shader->id);
-            SDL_free(entry->vertex_shader);
-            SDL_free(entry->fragment_shader);
-            glDeleteProgram(entry->id);
-            next = entry->next;
-            SDL_free(entry);
-            entry = next;
-        }
+	{
+	    GLES2_ShaderCacheEntry *entry;
+	    GLES2_ShaderCacheEntry *next;
+	    entry = rdata->shader_cache.head;
+	    while (entry)
+	    {
+                glDeleteShader(entry->id);
+                next = entry->next;
+                SDL_free(entry);
+                entry = next;
+	    }
+	}
+	{
+	    GLES2_ProgramCacheEntry *entry;
+	    GLES2_ProgramCacheEntry *next;
+            entry = rdata->program_cache.head;
+            while (entry) {
+                glDeleteProgram(entry->id);
+                next = entry->next;
+                SDL_free(entry);
+                entry = next;
+            }
+	}
         if (rdata->context) {
             SDL_GL_DeleteContext(rdata->context);
         }