mirror of https://github.com/encounter/SDL.git
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:
parent
175b343ee6
commit
af50403e50
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue