render: SDL_RenderPresent now behaves when a render target is currently set.

It'll temporarily unbind it, draw letterboxing if necessary, present, and
then rebind the previous render target.
This commit is contained in:
Ryan C. Gordon committed 2024-09-25 16:26:36 -04:00
1 parent 7a6a0becb8
commit 4c48ff51f8
2 files changed
+13 -7

No files matched your search

+7 -3
View File
@@ -4949,9 +4949,9 @@ bool SDL_RenderPresent(SDL_Renderer *renderer)
CHECK_RENDERER_MAGIC(renderer, false);
// !!! FIXME: fail if using a render target? Or just implicitly set the render target to NULL now?
if (renderer->view != &renderer->main_view) {
return SDL_SetError("Cannot present a render target");
SDL_Texture *target = renderer->target;
if (target) {
SDL_SetRenderTarget(renderer, NULL);
}
SDL_RenderLogicalPresentation(renderer);
@@ -4972,6 +4972,10 @@ bool SDL_RenderPresent(SDL_Renderer *renderer)
presented = false;
}
if (target) {
SDL_SetRenderTarget(renderer, target);
}
if (renderer->simulate_vsync ||
(!presented && renderer->wanted_vsync)) {
SDL_SimulateRenderVSync(renderer);