# HG changeset patch # User Sam Lantinga # Date 1153597908 0 # Node ID d4572b97b08fbef63856a13ab4802b8e94c4928e # Parent 4905cac7a4bd6bb7d79f7b5a9872a2308a2599a0 Switch OpenGL contexts when switching render contexts. Query the maximum texture size and show the current render parameters. diff -r 4905cac7a4bd -r d4572b97b08f src/video/SDL_renderer_gl.c --- a/src/video/SDL_renderer_gl.c Sat Jul 22 19:03:31 2006 +0000 +++ b/src/video/SDL_renderer_gl.c Sat Jul 22 19:51:48 2006 +0000 @@ -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 @@ return NULL; } + renderer->ActivateRenderer = GL_ActivateRenderer; renderer->CreateTexture = GL_CreateTexture; renderer->SetTexturePalette = GL_SetTexturePalette; renderer->GetTexturePalette = GL_GetTexturePalette; @@ -185,9 +187,8 @@ 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 @@ 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 -r 4905cac7a4bd -r d4572b97b08f src/video/SDL_sysvideo.h --- a/src/video/SDL_sysvideo.h Sat Jul 22 19:03:31 2006 +0000 +++ b/src/video/SDL_sysvideo.h Sat Jul 22 19:51:48 2006 +0000 @@ -55,6 +55,7 @@ /* 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 -r 4905cac7a4bd -r d4572b97b08f src/video/SDL_video.c --- a/src/video/SDL_video.c Sat Jul 22 19:03:31 2006 +0000 +++ b/src/video/SDL_video.c Sat Jul 22 19:51:48 2006 +0000 @@ -1366,10 +1366,7 @@ 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 @@ 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 -r 4905cac7a4bd -r d4572b97b08f test/common.c --- a/test/common.c Sat Jul 22 19:03:31 2006 +0000 +++ b/test/common.c Sat Jul 22 19:51:48 2006 +0000 @@ -610,7 +610,7 @@ 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 @@ 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]);