Browse Source

render: Fix internal state getting out of sync when destroying a texture that was just rendered and then creating a new one, in the GL and GLES2 backends. Fixes bug #4433.

Alex Szpakowski 6 years ago
parent
commit
dc3443602b
2 changed files with 14 additions and 0 deletions
  1. 7 0
      src/render/opengl/SDL_render_gl.c
  2. 7 0
      src/render/opengles2/SDL_render_gles2.c

+ 7 - 0
src/render/opengl/SDL_render_gl.c

@@ -1388,6 +1388,13 @@ GL_DestroyTexture(SDL_Renderer * renderer, SDL_Texture * texture)
 
     GL_ActivateRenderer(renderer);
 
+    if (renderdata->drawstate.texture == texture) {
+        renderdata->drawstate.texture = NULL;
+    }
+    if (renderdata->drawstate.target == texture) {
+        renderdata->drawstate.target = NULL;
+    }
+
     if (!data) {
         return;
     }

+ 7 - 0
src/render/opengles2/SDL_render_gles2.c

@@ -1766,6 +1766,13 @@ GLES2_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture)
 
     GLES2_ActivateRenderer(renderer);
 
+    if (data->drawstate.texture == texture) {
+        data->drawstate.texture = NULL;
+    }
+    if (data->drawstate.target == texture) {
+        data->drawstate.target = NULL;
+    }
+
     /* Destroy the texture */
     if (tdata) {
         data->glDeleteTextures(1, &tdata->texture);