Fixed bug #771
Cleaned up the code a bit and made sure that an OpenGL window gets the OpenGL renderer. Inspired by a patch from Mason Wheeler. --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404229
This commit is contained in:
parent
6524589fad
commit
e7553b2ddc
1 changed files with 22 additions and 19 deletions
|
@ -1490,34 +1490,38 @@ SDL_CreateRenderer(SDL_WindowID windowID, int index, Uint32 flags)
|
||||||
SDL_DestroyRenderer(windowID);
|
SDL_DestroyRenderer(windowID);
|
||||||
|
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
const char *override = SDL_getenv("SDL_VIDEO_RENDERER");
|
char *override = SDL_getenv("SDL_VIDEO_RENDERER");
|
||||||
|
int n = SDL_GetNumRenderDrivers();
|
||||||
|
|
||||||
|
if (!override && (window->flags & SDL_WINDOW_OPENGL)) {
|
||||||
|
override = "opengl";
|
||||||
|
}
|
||||||
if (override) {
|
if (override) {
|
||||||
int i, n = SDL_GetNumRenderDrivers();
|
for (index = 0; index < n; ++index) {
|
||||||
for (i = 0; i < n; ++i) {
|
|
||||||
SDL_RenderDriver *driver =
|
SDL_RenderDriver *driver =
|
||||||
&SDL_CurrentDisplay.render_drivers[i];
|
&SDL_CurrentDisplay.render_drivers[index];
|
||||||
|
|
||||||
if (SDL_strcasecmp(override, driver->info.name) == 0) {
|
if (SDL_strcasecmp(override, driver->info.name) == 0) {
|
||||||
index = i;
|
/* Create a new renderer instance */
|
||||||
|
window->renderer = driver->CreateRenderer(window, flags);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
}
|
|
||||||
if (index < 0) {
|
|
||||||
int n = SDL_GetNumRenderDrivers();
|
|
||||||
for (index = 0; index < n; ++index) {
|
for (index = 0; index < n; ++index) {
|
||||||
SDL_RenderDriver *driver =
|
SDL_RenderDriver *driver =
|
||||||
&SDL_CurrentDisplay.render_drivers[index];
|
&SDL_CurrentDisplay.render_drivers[index];
|
||||||
|
|
||||||
if ((driver->info.flags & flags) == flags) {
|
if ((driver->info.flags & flags) == flags) {
|
||||||
/* Create a new renderer instance */
|
/* Create a new renderer instance */
|
||||||
window->renderer = SDL_CurrentDisplay.render_drivers[index].CreateRenderer(window, flags);
|
window->renderer = driver->CreateRenderer(window, flags);
|
||||||
if (window->renderer) {
|
if (window->renderer) {
|
||||||
/* Yay, we got one! */
|
/* Yay, we got one! */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (index == n) {
|
if (index == n) {
|
||||||
SDL_SetError("Couldn't find matching render driver");
|
SDL_SetError("Couldn't find matching render driver");
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1528,7 +1532,6 @@ SDL_CreateRenderer(SDL_WindowID windowID, int index, Uint32 flags)
|
||||||
SDL_GetNumRenderDrivers() - 1);
|
SDL_GetNumRenderDrivers() - 1);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create a new renderer instance */
|
/* Create a new renderer instance */
|
||||||
window->renderer = SDL_CurrentDisplay.render_drivers[index].CreateRenderer(window, flags);
|
window->renderer = SDL_CurrentDisplay.render_drivers[index].CreateRenderer(window, flags);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue