Fixed bug 2575 - Current GL context tracking fails

Ronie Salgado

The GL Renderer current context tracking fails when one window is used with an SDL renderer but another separate window is used with a user handled OpenGL context.

Attached is a small program that reproduces this bug, at least in some Linux machines where an OpenGL renderer is provided by default.

Expected Output:
-"First window" should be blue.
-"Second window" should be green.

Gotten Output:
- "First window" black.
- "Second window" blue.

What happened:
The renderer created for the "first window" ends rendering into the "second window" OpenGL context.

Bug location:

SDL_render_gl.c - line 286 on hg:
static SDL_GLContext SDL_CurrentContext = NULL;

When making SDL_GL_MakeCurrent from the user perspective, that variable or the GL renderer is not notified about the OpenGL context change.

Solution proposal:
- Move the current GL context cache into another place global.
This commit is contained in:
Sam Lantinga 2014-06-15 18:09:39 -07:00
parent 175b343ee6
commit af50403e50
1 changed files with 3 additions and 2 deletions

View File

@ -290,7 +290,8 @@ GL_ActivateRenderer(SDL_Renderer * renderer)
{ {
GL_RenderData *data = (GL_RenderData *) renderer->driverdata; GL_RenderData *data = (GL_RenderData *) renderer->driverdata;
if (SDL_CurrentContext != data->context) { if (SDL_CurrentContext != data->context ||
SDL_GL_GetCurrentContext() != data->context) {
if (SDL_GL_MakeCurrent(renderer->window, data->context) < 0) { if (SDL_GL_MakeCurrent(renderer->window, data->context) < 0) {
return -1; return -1;
} }
@ -310,7 +311,7 @@ GL_ResetState(SDL_Renderer *renderer)
{ {
GL_RenderData *data = (GL_RenderData *) renderer->driverdata; GL_RenderData *data = (GL_RenderData *) renderer->driverdata;
if (SDL_CurrentContext == data->context) { if (SDL_GL_GetCurrentContext() == data->context) {
GL_UpdateViewport(renderer); GL_UpdateViewport(renderer);
} else { } else {
GL_ActivateRenderer(renderer); GL_ActivateRenderer(renderer);