Commit 68df2209 authored by Sam Lantinga's avatar Sam Lantinga

Switch OpenGL contexts when switching render contexts.

Query the maximum texture size and show the current render parameters.

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401968
parent 5c1901a9
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
/* OpenGL renderer implementation */ /* OpenGL renderer implementation */
static SDL_Renderer *GL_CreateRenderer(SDL_Window * window, Uint32 flags); 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_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture);
static int GL_SetTexturePalette(SDL_Renderer * renderer, static int GL_SetTexturePalette(SDL_Renderer * renderer,
SDL_Texture * texture, SDL_Texture * texture,
...@@ -147,6 +148,7 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) ...@@ -147,6 +148,7 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags)
return NULL; return NULL;
} }
renderer->ActivateRenderer = GL_ActivateRenderer;
renderer->CreateTexture = GL_CreateTexture; renderer->CreateTexture = GL_CreateTexture;
renderer->SetTexturePalette = GL_SetTexturePalette; renderer->SetTexturePalette = GL_SetTexturePalette;
renderer->GetTexturePalette = GL_GetTexturePalette; renderer->GetTexturePalette = GL_GetTexturePalette;
...@@ -185,9 +187,8 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) ...@@ -185,9 +187,8 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags)
renderer->info.flags |= SDL_Renderer_PresentVSync; renderer->info.flags |= SDL_Renderer_PresentVSync;
} }
/* FIXME: Add a function to make the rendering context current when selecting the renderer */ glGetIntegerv(GL_MAX_TEXTURE_SIZE, &renderer->info.max_texture_width);
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &renderer->info.max_texture_height);
/* FIXME: Query maximum texture size */
/* FIXME: Check for GL_ARB_texture_rectangle and GL_EXT_texture_rectangle */ /* FIXME: Check for GL_ARB_texture_rectangle and GL_EXT_texture_rectangle */
...@@ -209,6 +210,15 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) ...@@ -209,6 +210,15 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags)
return renderer; 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 static __inline__ int
power_of_2(int input) power_of_2(int input)
{ {
......
...@@ -55,6 +55,7 @@ struct SDL_Texture ...@@ -55,6 +55,7 @@ struct SDL_Texture
/* Define the SDL renderer structure */ /* Define the SDL renderer structure */
struct SDL_Renderer struct SDL_Renderer
{ {
int (*ActivateRenderer) (SDL_Renderer * renderer);
int (*CreateTexture) (SDL_Renderer * renderer, SDL_Texture * texture); int (*CreateTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
int (*QueryTexturePixels) (SDL_Renderer * renderer, SDL_Texture * texture, int (*QueryTexturePixels) (SDL_Renderer * renderer, SDL_Texture * texture,
void **pixels, int *pitch); void **pixels, int *pitch);
......
...@@ -1366,10 +1366,7 @@ SDL_CreateRenderer(SDL_WindowID windowID, int index, Uint32 flags) ...@@ -1366,10 +1366,7 @@ SDL_CreateRenderer(SDL_WindowID windowID, int index, Uint32 flags)
window->renderer = window->renderer =
SDL_CurrentDisplay.render_drivers[index].CreateRenderer(window, SDL_CurrentDisplay.render_drivers[index].CreateRenderer(window,
flags); flags);
if (!window->renderer) { SDL_SelectRenderer(window->id);
return -1;
}
SDL_CurrentDisplay.current_renderer = window->renderer;
return 0; return 0;
} }
...@@ -1378,11 +1375,18 @@ int ...@@ -1378,11 +1375,18 @@ int
SDL_SelectRenderer(SDL_WindowID windowID) SDL_SelectRenderer(SDL_WindowID windowID)
{ {
SDL_Window *window = SDL_GetWindowFromID(windowID); SDL_Window *window = SDL_GetWindowFromID(windowID);
SDL_Renderer *renderer;
if (!window || !window->renderer) { if (!window || !window->renderer) {
return -1; 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; return 0;
} }
......
...@@ -610,7 +610,7 @@ CommonInit(CommonState * state) ...@@ -610,7 +610,7 @@ CommonInit(CommonState * state)
if (n == 0) { if (n == 0) {
fprintf(stderr, "No built-in render drivers\n"); fprintf(stderr, "No built-in render drivers\n");
} else { } else {
fprintf(stderr, "Built-in render video drivers:\n"); fprintf(stderr, "Built-in render drivers:\n");
for (i = 0; i < n; ++i) { for (i = 0; i < n; ++i) {
SDL_GetRendererInfo(i, &info); SDL_GetRendererInfo(i, &info);
PrintRenderer(&info); PrintRenderer(&info);
...@@ -690,6 +690,13 @@ CommonInit(CommonState * state) ...@@ -690,6 +690,13 @@ CommonInit(CommonState * state)
SDL_GetError()); SDL_GetError());
return SDL_FALSE; 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]); SDL_SelectRenderer(state->windows[0]);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment