mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-03 16:36:25 +00:00
render: Remove SDL_GetRenderDriverInfo and change SDL_CreateRenderer.
Fixes #6625.
This commit is contained in:
@@ -432,7 +432,6 @@ SDL3_0.0.0 {
|
||||
SDL_hid_ble_scan;
|
||||
SDL_GetWindowWMInfo;
|
||||
SDL_GetNumRenderDrivers;
|
||||
SDL_GetRenderDriverInfo;
|
||||
SDL_CreateWindowAndRenderer;
|
||||
SDL_CreateRenderer;
|
||||
SDL_CreateSoftwareRenderer;
|
||||
@@ -861,6 +860,7 @@ SDL3_0.0.0 {
|
||||
SDL_GetTicksNS;
|
||||
SDL_DelayNS;
|
||||
SDL_GetEventState;
|
||||
SDL_GetRenderDriver;
|
||||
# extra symbols go here (don't modify this line)
|
||||
local: *;
|
||||
};
|
||||
|
@@ -288,7 +288,6 @@
|
||||
#define SDL_EnclosePoints SDL_EnclosePoints_REAL
|
||||
#define SDL_IntersectRectAndLine SDL_IntersectRectAndLine_REAL
|
||||
#define SDL_GetNumRenderDrivers SDL_GetNumRenderDrivers_REAL
|
||||
#define SDL_GetRenderDriverInfo SDL_GetRenderDriverInfo_REAL
|
||||
#define SDL_CreateWindowAndRenderer SDL_CreateWindowAndRenderer_REAL
|
||||
#define SDL_CreateRenderer SDL_CreateRenderer_REAL
|
||||
#define SDL_CreateSoftwareRenderer SDL_CreateSoftwareRenderer_REAL
|
||||
@@ -885,3 +884,4 @@
|
||||
#define SDL_GetTicksNS SDL_GetTicksNS_REAL
|
||||
#define SDL_DelayNS SDL_DelayNS_REAL
|
||||
#define SDL_GetEventState SDL_GetEventState_REAL
|
||||
#define SDL_GetRenderDriver SDL_GetRenderDriver_REAL
|
||||
|
@@ -315,9 +315,8 @@ SDL_DYNAPI_PROC(void,SDL_UnionRect,(const SDL_Rect *a, const SDL_Rect *b, SDL_Re
|
||||
SDL_DYNAPI_PROC(SDL_bool,SDL_EnclosePoints,(const SDL_Point *a, int b, const SDL_Rect *c, SDL_Rect *d),(a,b,c,d),return)
|
||||
SDL_DYNAPI_PROC(SDL_bool,SDL_IntersectRectAndLine,(const SDL_Rect *a, int *b, int *c, int *d, int *e),(a,b,c,d,e),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_GetNumRenderDrivers,(void),(),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_GetRenderDriverInfo,(int a, SDL_RendererInfo *b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_CreateWindowAndRenderer,(int a, int b, Uint32 c, SDL_Window **d, SDL_Renderer **e),(a,b,c,d,e),return)
|
||||
SDL_DYNAPI_PROC(SDL_Renderer*,SDL_CreateRenderer,(SDL_Window *a, int b, Uint32 c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(SDL_Renderer*,SDL_CreateRenderer,(SDL_Window *a, const char *b, Uint32 c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(SDL_Renderer*,SDL_CreateSoftwareRenderer,(SDL_Surface *a),(a),return)
|
||||
SDL_DYNAPI_PROC(SDL_Renderer*,SDL_GetRenderer,(SDL_Window *a),(a),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_GetRendererInfo,(SDL_Renderer *a, SDL_RendererInfo *b),(a,b),return)
|
||||
@@ -961,3 +960,4 @@ SDL_DYNAPI_PROC(void*,SDL_memset4,(void *a, Uint32 b, size_t c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(Uint64,SDL_GetTicksNS,(void),(),return)
|
||||
SDL_DYNAPI_PROC(void,SDL_DelayNS,(Uint64 a),(a),)
|
||||
SDL_DYNAPI_PROC(Uint8,SDL_GetEventState,(Uint32 a),(a),return)
|
||||
SDL_DYNAPI_PROC(const char*,SDL_GetRenderDriver,(int a),(a),return)
|
||||
|
@@ -642,17 +642,18 @@ int SDL_GetNumRenderDrivers(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
int SDL_GetRenderDriverInfo(int index, SDL_RendererInfo *info)
|
||||
const char *SDL_GetRenderDriver(int index)
|
||||
{
|
||||
#if !SDL_RENDER_DISABLED
|
||||
if (index < 0 || index >= SDL_GetNumRenderDrivers()) {
|
||||
return SDL_SetError("index must be in the range of 0 - %d",
|
||||
SDL_SetError("index must be in the range of 0 - %d",
|
||||
SDL_GetNumRenderDrivers() - 1);
|
||||
return NULL;
|
||||
}
|
||||
*info = render_drivers[index]->info;
|
||||
return 0;
|
||||
return render_drivers[index]->info.name;
|
||||
#else
|
||||
return SDL_SetError("SDL not built with rendering support");
|
||||
SDL_SetError("SDL not built with rendering support");
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -862,7 +863,7 @@ int SDL_CreateWindowAndRenderer(int width, int height, Uint32 window_flags,
|
||||
return -1;
|
||||
}
|
||||
|
||||
*renderer = SDL_CreateRenderer(*window, -1, 0);
|
||||
*renderer = SDL_CreateRenderer(*window, NULL, 0);
|
||||
if (!*renderer) {
|
||||
return -1;
|
||||
}
|
||||
@@ -926,13 +927,14 @@ static void SDL_CalculateSimulatedVSyncInterval(SDL_Renderer *renderer, SDL_Wind
|
||||
#endif /* !SDL_RENDER_DISABLED */
|
||||
|
||||
SDL_Renderer *
|
||||
SDL_CreateRenderer(SDL_Window *window, int index, Uint32 flags)
|
||||
SDL_CreateRenderer(SDL_Window *window, const char *name, Uint32 flags)
|
||||
{
|
||||
#if !SDL_RENDER_DISABLED
|
||||
SDL_Renderer *renderer = NULL;
|
||||
int n = SDL_GetNumRenderDrivers();
|
||||
const int n = SDL_GetNumRenderDrivers();
|
||||
SDL_bool batching = SDL_TRUE;
|
||||
const char *hint;
|
||||
int i;
|
||||
|
||||
#if defined(__ANDROID__)
|
||||
Android_ActivityMutex_Lock_Running();
|
||||
@@ -957,53 +959,39 @@ SDL_CreateRenderer(SDL_Window *window, int index, Uint32 flags)
|
||||
}
|
||||
}
|
||||
|
||||
if (index < 0) {
|
||||
hint = SDL_GetHint(SDL_HINT_RENDER_DRIVER);
|
||||
if (hint) {
|
||||
for (index = 0; index < n; ++index) {
|
||||
const SDL_RenderDriver *driver = render_drivers[index];
|
||||
if (!name) {
|
||||
name = SDL_GetHint(SDL_HINT_RENDER_DRIVER);
|
||||
}
|
||||
|
||||
if (SDL_strcasecmp(hint, driver->info.name) == 0) {
|
||||
/* Create a new renderer instance */
|
||||
renderer = driver->CreateRenderer(window, flags);
|
||||
if (renderer) {
|
||||
batching = SDL_FALSE;
|
||||
}
|
||||
if (name) {
|
||||
for (i = 0; i < n; i++) {
|
||||
const SDL_RenderDriver *driver = render_drivers[i];
|
||||
if (SDL_strcasecmp(name, driver->info.name) == 0) {
|
||||
/* Create a new renderer instance */
|
||||
renderer = driver->CreateRenderer(window, flags);
|
||||
if (renderer) {
|
||||
batching = SDL_FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < n; i++) {
|
||||
const SDL_RenderDriver *driver = render_drivers[i];
|
||||
if ((driver->info.flags & flags) == flags) {
|
||||
/* Create a new renderer instance */
|
||||
renderer = driver->CreateRenderer(window, flags);
|
||||
if (renderer) {
|
||||
/* Yay, we got one! */
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (renderer == NULL) {
|
||||
for (index = 0; index < n; ++index) {
|
||||
const SDL_RenderDriver *driver = render_drivers[index];
|
||||
|
||||
if ((driver->info.flags & flags) == flags) {
|
||||
/* Create a new renderer instance */
|
||||
renderer = driver->CreateRenderer(window, flags);
|
||||
if (renderer) {
|
||||
/* Yay, we got one! */
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (renderer == NULL) {
|
||||
SDL_SetError("Couldn't find matching render driver");
|
||||
goto error;
|
||||
}
|
||||
} else {
|
||||
if (index >= n) {
|
||||
SDL_SetError("index must be -1 or in the range of 0 - %d",
|
||||
n - 1);
|
||||
goto error;
|
||||
}
|
||||
/* Create a new renderer instance */
|
||||
renderer = render_drivers[index]->CreateRenderer(window, flags);
|
||||
batching = SDL_FALSE;
|
||||
if (renderer == NULL) {
|
||||
goto error;
|
||||
}
|
||||
if (renderer == NULL) {
|
||||
SDL_SetError("Couldn't find matching render driver");
|
||||
goto error;
|
||||
}
|
||||
|
||||
if ((flags & SDL_RENDERER_PRESENTVSYNC) != 0) {
|
||||
|
@@ -1196,16 +1196,13 @@ SDLTest_CommonInit(SDLTest_CommonState *state)
|
||||
}
|
||||
|
||||
if (state->verbose & VERBOSE_RENDER) {
|
||||
SDL_RendererInfo info;
|
||||
|
||||
n = SDL_GetNumRenderDrivers();
|
||||
if (n == 0) {
|
||||
SDL_Log("No built-in render drivers\n");
|
||||
} else {
|
||||
SDL_Log("Built-in render drivers:\n");
|
||||
for (i = 0; i < n; ++i) {
|
||||
SDL_GetRenderDriverInfo(i, &info);
|
||||
SDLTest_PrintRenderer(&info);
|
||||
SDL_Log(" %s\n", SDL_GetRenderDriver(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1310,25 +1307,8 @@ SDLTest_CommonInit(SDLTest_CommonState *state)
|
||||
}
|
||||
|
||||
if (!state->skip_renderer && (state->renderdriver || !(state->window_flags & (SDL_WINDOW_OPENGL | SDL_WINDOW_VULKAN | SDL_WINDOW_METAL)))) {
|
||||
m = -1;
|
||||
if (state->renderdriver) {
|
||||
SDL_RendererInfo info;
|
||||
n = SDL_GetNumRenderDrivers();
|
||||
for (j = 0; j < n; ++j) {
|
||||
SDL_GetRenderDriverInfo(j, &info);
|
||||
if (SDL_strcasecmp(info.name, state->renderdriver) == 0) {
|
||||
m = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (m == -1) {
|
||||
SDL_Log("Couldn't find render driver named %s",
|
||||
state->renderdriver);
|
||||
return SDL_FALSE;
|
||||
}
|
||||
}
|
||||
state->renderers[i] = SDL_CreateRenderer(state->windows[i],
|
||||
m, state->render_flags);
|
||||
state->renderdriver, state->render_flags);
|
||||
if (!state->renderers[i]) {
|
||||
SDL_Log("Couldn't create renderer: %s\n",
|
||||
SDL_GetError());
|
||||
|
@@ -213,13 +213,7 @@ static int SDL_CreateWindowTexture(SDL_VideoDevice *_this, SDL_Window *window, U
|
||||
|
||||
/* Check to see if there's a specific driver requested */
|
||||
if (specific_accelerated_renderer) {
|
||||
for (i = 0; i < SDL_GetNumRenderDrivers(); ++i) {
|
||||
SDL_GetRenderDriverInfo(i, &info);
|
||||
if (SDL_strcasecmp(info.name, hint) == 0) {
|
||||
renderer = SDL_CreateRenderer(window, i, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
renderer = SDL_CreateRenderer(window, hint, 0);
|
||||
if (renderer == NULL || (SDL_GetRendererInfo(renderer, &info) == -1)) {
|
||||
if (renderer) {
|
||||
SDL_DestroyRenderer(renderer);
|
||||
@@ -228,10 +222,11 @@ static int SDL_CreateWindowTexture(SDL_VideoDevice *_this, SDL_Window *window, U
|
||||
}
|
||||
/* if it was specifically requested, even if SDL_RENDERER_ACCELERATED isn't set, we'll accept this renderer. */
|
||||
} else {
|
||||
for (i = 0; i < SDL_GetNumRenderDrivers(); ++i) {
|
||||
SDL_GetRenderDriverInfo(i, &info);
|
||||
if (SDL_strcmp(info.name, "software") != 0) {
|
||||
renderer = SDL_CreateRenderer(window, i, 0);
|
||||
const int total = SDL_GetNumRenderDrivers();
|
||||
for (i = 0; i < total; ++i) {
|
||||
const char *name = SDL_GetRenderDriver(i);
|
||||
if (name && (SDL_strcmp(info.name, "software") != 0)) {
|
||||
renderer = SDL_CreateRenderer(window, name, 0);
|
||||
if (renderer && (SDL_GetRendererInfo(renderer, &info) == 0) && (info.flags & SDL_RENDERER_ACCELERATED)) {
|
||||
break; /* this will work. */
|
||||
}
|
||||
|
Reference in New Issue
Block a user