diff --git a/src/video/SDL_renderer_gl.c b/src/video/SDL_renderer_gl.c index 04b27b231..725d316fa 100644 --- a/src/video/SDL_renderer_gl.c +++ b/src/video/SDL_renderer_gl.c @@ -33,6 +33,7 @@ /* OpenGL renderer implementation */ static SDL_Renderer *GL_CreateRenderer(SDL_Window * window, Uint32 flags); +static int GL_ActivateRenderer(SDL_Renderer * renderer); static int GL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture); static int GL_SetTexturePalette(SDL_Renderer * renderer, SDL_Texture * texture, @@ -147,6 +148,7 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) return NULL; } + renderer->ActivateRenderer = GL_ActivateRenderer; renderer->CreateTexture = GL_CreateTexture; renderer->SetTexturePalette = GL_SetTexturePalette; renderer->GetTexturePalette = GL_GetTexturePalette; @@ -185,9 +187,8 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) renderer->info.flags |= SDL_Renderer_PresentVSync; } - /* FIXME: Add a function to make the rendering context current when selecting the renderer */ - - /* FIXME: Query maximum texture size */ + glGetIntegerv(GL_MAX_TEXTURE_SIZE, &renderer->info.max_texture_width); + glGetIntegerv(GL_MAX_TEXTURE_SIZE, &renderer->info.max_texture_height); /* FIXME: Check for GL_ARB_texture_rectangle and GL_EXT_texture_rectangle */ @@ -209,6 +210,15 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) return renderer; } +static int +GL_ActivateRenderer(SDL_Renderer * renderer) +{ + GL_RenderData *data = (GL_RenderData *) renderer->driverdata; + SDL_Window *window = SDL_GetWindowFromID(renderer->window); + + return SDL_GL_MakeCurrent(window->id, data->context); +} + static __inline__ int power_of_2(int input) { diff --git a/src/video/SDL_sysvideo.h b/src/video/SDL_sysvideo.h index 302cd236d..ec2e6ea3b 100644 --- a/src/video/SDL_sysvideo.h +++ b/src/video/SDL_sysvideo.h @@ -55,6 +55,7 @@ struct SDL_Texture /* Define the SDL renderer structure */ struct SDL_Renderer { + int (*ActivateRenderer) (SDL_Renderer * renderer); int (*CreateTexture) (SDL_Renderer * renderer, SDL_Texture * texture); int (*QueryTexturePixels) (SDL_Renderer * renderer, SDL_Texture * texture, void **pixels, int *pitch); diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 04e4d2894..56c63f04c 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -1366,10 +1366,7 @@ SDL_CreateRenderer(SDL_WindowID windowID, int index, Uint32 flags) window->renderer = SDL_CurrentDisplay.render_drivers[index].CreateRenderer(window, flags); - if (!window->renderer) { - return -1; - } - SDL_CurrentDisplay.current_renderer = window->renderer; + SDL_SelectRenderer(window->id); return 0; } @@ -1378,11 +1375,18 @@ int SDL_SelectRenderer(SDL_WindowID windowID) { SDL_Window *window = SDL_GetWindowFromID(windowID); + SDL_Renderer *renderer; if (!window || !window->renderer) { return -1; } - SDL_CurrentDisplay.current_renderer = window->renderer; + renderer = window->renderer; + if (renderer && renderer->ActivateRenderer) { + if (renderer->ActivateRenderer(renderer) < 0) { + return -1; + } + } + SDL_CurrentDisplay.current_renderer = renderer; return 0; } diff --git a/test/common.c b/test/common.c index 4baa5a440..552051e86 100644 --- a/test/common.c +++ b/test/common.c @@ -610,7 +610,7 @@ CommonInit(CommonState * state) if (n == 0) { fprintf(stderr, "No built-in render drivers\n"); } else { - fprintf(stderr, "Built-in render video drivers:\n"); + fprintf(stderr, "Built-in render drivers:\n"); for (i = 0; i < n; ++i) { SDL_GetRendererInfo(i, &info); PrintRenderer(&info); @@ -690,6 +690,13 @@ CommonInit(CommonState * state) SDL_GetError()); return SDL_FALSE; } + if (state->verbose & VERBOSE_RENDER) { + SDL_RendererInfo info; + + fprintf(stderr, "Current renderer:\n"); + SDL_GetRendererInfo(-1, &info); + PrintRenderer(&info); + } } } SDL_SelectRenderer(state->windows[0]);