From 40a52ceef7bbafb9b89115a471503cd161d13baf Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 4 Feb 2019 18:55:39 -0500 Subject: [PATCH] render: Fix OpenGL draw state cache for various points of texture binding. --- src/render/opengl/SDL_render_gl.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/render/opengl/SDL_render_gl.c b/src/render/opengl/SDL_render_gl.c index e2c9a1cd09d2b..81da88853aea3 100644 --- a/src/render/opengl/SDL_render_gl.c +++ b/src/render/opengl/SDL_render_gl.c @@ -443,6 +443,8 @@ GL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) GL_ActivateRenderer(renderer); + renderdata->drawstate.texture = NULL; /* we trash this state. */ + if (texture->access == SDL_TEXTUREACCESS_TARGET && !renderdata->GL_EXT_framebuffer_object_supported) { return SDL_SetError("Render targets not supported by OpenGL"); @@ -641,6 +643,8 @@ GL_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, GL_ActivateRenderer(renderer); + renderdata->drawstate.texture = NULL; /* we trash this state. */ + renderdata->glEnable(textype); renderdata->glBindTexture(textype, data->texture); renderdata->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); @@ -702,6 +706,8 @@ GL_UpdateTextureYUV(SDL_Renderer * renderer, SDL_Texture * texture, GL_ActivateRenderer(renderer); + renderdata->drawstate.texture = NULL; /* we trash this state. */ + renderdata->glEnable(textype); renderdata->glBindTexture(textype, data->texture); renderdata->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); @@ -1469,6 +1475,9 @@ GL_BindTexture (SDL_Renderer * renderer, SDL_Texture *texture, float *texw, floa } data->glBindTexture(textype, texturedata->texture); + data->drawstate.texturing = SDL_TRUE; + data->drawstate.texture = texture; + if(texw) *texw = (float)texturedata->texw; if(texh) *texh = (float)texturedata->texh; @@ -1496,6 +1505,9 @@ GL_UnbindTexture (SDL_Renderer * renderer, SDL_Texture *texture) data->glDisable(textype); + data->drawstate.texturing = SDL_FALSE; + data->drawstate.texture = NULL; + return 0; }