|
@@ -839,12 +839,12 @@ SDL_CreateRenderer(SDL_Window * window, int index, Uint32 flags)
|
|
|
|
|
|
if (!window) {
|
|
if (!window) {
|
|
SDL_SetError("Invalid window");
|
|
SDL_SetError("Invalid window");
|
|
- return NULL;
|
|
|
|
|
|
+ goto error;
|
|
}
|
|
}
|
|
|
|
|
|
if (SDL_GetRenderer(window)) {
|
|
if (SDL_GetRenderer(window)) {
|
|
SDL_SetError("Renderer already associated with window");
|
|
SDL_SetError("Renderer already associated with window");
|
|
- return NULL;
|
|
|
|
|
|
+ goto error;
|
|
}
|
|
}
|
|
|
|
|
|
if (SDL_GetHint(SDL_HINT_RENDER_VSYNC)) {
|
|
if (SDL_GetHint(SDL_HINT_RENDER_VSYNC)) {
|
|
@@ -888,67 +888,74 @@ SDL_CreateRenderer(SDL_Window * window, int index, Uint32 flags)
|
|
}
|
|
}
|
|
if (index == n) {
|
|
if (index == n) {
|
|
SDL_SetError("Couldn't find matching render driver");
|
|
SDL_SetError("Couldn't find matching render driver");
|
|
- return NULL;
|
|
|
|
|
|
+ goto error;
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
if (index >= SDL_GetNumRenderDrivers()) {
|
|
if (index >= SDL_GetNumRenderDrivers()) {
|
|
SDL_SetError("index must be -1 or in the range of 0 - %d",
|
|
SDL_SetError("index must be -1 or in the range of 0 - %d",
|
|
SDL_GetNumRenderDrivers() - 1);
|
|
SDL_GetNumRenderDrivers() - 1);
|
|
- return NULL;
|
|
|
|
|
|
+ goto error;
|
|
}
|
|
}
|
|
/* Create a new renderer instance */
|
|
/* Create a new renderer instance */
|
|
renderer = render_drivers[index]->CreateRenderer(window, flags);
|
|
renderer = render_drivers[index]->CreateRenderer(window, flags);
|
|
batching = SDL_FALSE;
|
|
batching = SDL_FALSE;
|
|
}
|
|
}
|
|
|
|
|
|
- if (renderer) {
|
|
|
|
- VerifyDrawQueueFunctions(renderer);
|
|
|
|
|
|
+ if (!renderer) {
|
|
|
|
+ goto error;
|
|
|
|
+ }
|
|
|
|
|
|
- /* let app/user override batching decisions. */
|
|
|
|
- if (renderer->always_batch) {
|
|
|
|
- batching = SDL_TRUE;
|
|
|
|
- } else if (SDL_GetHint(SDL_HINT_RENDER_BATCHING)) {
|
|
|
|
- batching = SDL_GetHintBoolean(SDL_HINT_RENDER_BATCHING, SDL_TRUE);
|
|
|
|
- }
|
|
|
|
|
|
+ VerifyDrawQueueFunctions(renderer);
|
|
|
|
|
|
- renderer->batching = batching;
|
|
|
|
- renderer->magic = &renderer_magic;
|
|
|
|
- renderer->window = window;
|
|
|
|
- renderer->target_mutex = SDL_CreateMutex();
|
|
|
|
- renderer->scale.x = 1.0f;
|
|
|
|
- renderer->scale.y = 1.0f;
|
|
|
|
- renderer->dpi_scale.x = 1.0f;
|
|
|
|
- renderer->dpi_scale.y = 1.0f;
|
|
|
|
|
|
+ /* let app/user override batching decisions. */
|
|
|
|
+ if (renderer->always_batch) {
|
|
|
|
+ batching = SDL_TRUE;
|
|
|
|
+ } else if (SDL_GetHint(SDL_HINT_RENDER_BATCHING)) {
|
|
|
|
+ batching = SDL_GetHintBoolean(SDL_HINT_RENDER_BATCHING, SDL_TRUE);
|
|
|
|
+ }
|
|
|
|
|
|
- /* new textures start at zero, so we start at 1 so first render doesn't flush by accident. */
|
|
|
|
- renderer->render_command_generation = 1;
|
|
|
|
|
|
+ renderer->batching = batching;
|
|
|
|
+ renderer->magic = &renderer_magic;
|
|
|
|
+ renderer->window = window;
|
|
|
|
+ renderer->target_mutex = SDL_CreateMutex();
|
|
|
|
+ renderer->scale.x = 1.0f;
|
|
|
|
+ renderer->scale.y = 1.0f;
|
|
|
|
+ renderer->dpi_scale.x = 1.0f;
|
|
|
|
+ renderer->dpi_scale.y = 1.0f;
|
|
|
|
|
|
- if (window && renderer->GetOutputSize) {
|
|
|
|
- int window_w, window_h;
|
|
|
|
- int output_w, output_h;
|
|
|
|
- if (renderer->GetOutputSize(renderer, &output_w, &output_h) == 0) {
|
|
|
|
- SDL_GetWindowSize(renderer->window, &window_w, &window_h);
|
|
|
|
- renderer->dpi_scale.x = (float)window_w / output_w;
|
|
|
|
- renderer->dpi_scale.y = (float)window_h / output_h;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ /* new textures start at zero, so we start at 1 so first render doesn't flush by accident. */
|
|
|
|
+ renderer->render_command_generation = 1;
|
|
|
|
|
|
- if (SDL_GetWindowFlags(window) & (SDL_WINDOW_HIDDEN|SDL_WINDOW_MINIMIZED)) {
|
|
|
|
- renderer->hidden = SDL_TRUE;
|
|
|
|
- } else {
|
|
|
|
- renderer->hidden = SDL_FALSE;
|
|
|
|
|
|
+ if (window && renderer->GetOutputSize) {
|
|
|
|
+ int window_w, window_h;
|
|
|
|
+ int output_w, output_h;
|
|
|
|
+ if (renderer->GetOutputSize(renderer, &output_w, &output_h) == 0) {
|
|
|
|
+ SDL_GetWindowSize(renderer->window, &window_w, &window_h);
|
|
|
|
+ renderer->dpi_scale.x = (float)window_w / output_w;
|
|
|
|
+ renderer->dpi_scale.y = (float)window_h / output_h;
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (SDL_GetWindowFlags(window) & (SDL_WINDOW_HIDDEN|SDL_WINDOW_MINIMIZED)) {
|
|
|
|
+ renderer->hidden = SDL_TRUE;
|
|
|
|
+ } else {
|
|
|
|
+ renderer->hidden = SDL_FALSE;
|
|
|
|
+ }
|
|
|
|
|
|
- SDL_SetWindowData(window, SDL_WINDOWRENDERDATA, renderer);
|
|
|
|
|
|
+ SDL_SetWindowData(window, SDL_WINDOWRENDERDATA, renderer);
|
|
|
|
|
|
- SDL_RenderSetViewport(renderer, NULL);
|
|
|
|
|
|
+ SDL_RenderSetViewport(renderer, NULL);
|
|
|
|
|
|
- SDL_AddEventWatch(SDL_RendererEventWatch, renderer);
|
|
|
|
|
|
+ SDL_AddEventWatch(SDL_RendererEventWatch, renderer);
|
|
|
|
+
|
|
|
|
+ SDL_LogInfo(SDL_LOG_CATEGORY_RENDER,
|
|
|
|
+ "Created renderer: %s", renderer->info.name);
|
|
|
|
|
|
- SDL_LogInfo(SDL_LOG_CATEGORY_RENDER,
|
|
|
|
- "Created renderer: %s", renderer->info.name);
|
|
|
|
- }
|
|
|
|
return renderer;
|
|
return renderer;
|
|
|
|
+
|
|
|
|
+error:
|
|
|
|
+ return NULL;
|
|
|
|
+
|
|
#else
|
|
#else
|
|
SDL_SetError("SDL not built with rendering support");
|
|
SDL_SetError("SDL not built with rendering support");
|
|
return NULL;
|
|
return NULL;
|