mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-11-26 12:10:36 +00:00
Renderer logical size is now implemented as a render target
This fixes rounding errors with coordinate scaling and gives more flexibility in the presentation, as well as making it easy to maintain device independent resolution as windows move between different pixel density displays. By default when a renderer is created, it will match the window size so window coordinates and render coordinates are 1-1. Mouse and touch events are no longer filtered to change their coordinates, instead you can call SDL_ConvertEventToRenderCoordinates() to explicitly map event coordinates into the rendering viewport. SDL_RenderWindowToLogical() and SDL_RenderLogicalToWindow() have been renamed SDL_RenderCoordinatesFromWindow() and SDL_RenderCoordinatesToWindow() and take floating point coordinates in both directions. The viewport, clipping state, and scale for render targets are now persistent and will remain set whenever they are active.
This commit is contained in:
@@ -890,9 +890,11 @@ int render_testLogicalSize(void *arg)
|
||||
clearScreen();
|
||||
|
||||
/* Set the logical size and do a fill operation */
|
||||
ret = SDL_GetRendererOutputSize(renderer, &w, &h);
|
||||
ret = SDL_GetCurrentRenderOutputSize(renderer, &w, &h);
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_GetRendererOutputSize, expected: 0, got: %i", ret);
|
||||
ret = SDL_SetRenderLogicalSize(renderer, w / factor, h / factor);
|
||||
ret = SDL_SetRenderLogicalPresentation(renderer, w / factor, h / factor,
|
||||
SDL_LOGICAL_PRESENTATION_LETTERBOX,
|
||||
SDL_ScaleModeNearest);
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderLogicalSize, expected: 0, got: %i", ret);
|
||||
ret = SDL_SetRenderDrawColor(renderer, 0, 255, 0, SDL_ALPHA_OPAQUE);
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret);
|
||||
@@ -902,7 +904,10 @@ int render_testLogicalSize(void *arg)
|
||||
rect.h = (float)viewport.h / factor;
|
||||
ret = SDL_RenderFillRect(renderer, &rect);
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret);
|
||||
ret = SDL_SetRenderLogicalSize(renderer, 0, 0);
|
||||
(void)SDL_RenderPresent(renderer);
|
||||
ret = SDL_SetRenderLogicalPresentation(renderer, 0, 0,
|
||||
SDL_LOGICAL_PRESENTATION_DISABLED,
|
||||
SDL_ScaleModeNearest);
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderLogicalSize, expected: 0, got: %i", ret);
|
||||
|
||||
/* Check to see if final image matches. */
|
||||
@@ -912,9 +917,11 @@ int render_testLogicalSize(void *arg)
|
||||
clearScreen();
|
||||
|
||||
/* Set the logical size and viewport and do a fill operation */
|
||||
ret = SDL_GetRendererOutputSize(renderer, &w, &h);
|
||||
ret = SDL_GetCurrentRenderOutputSize(renderer, &w, &h);
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_GetRendererOutputSize, expected: 0, got: %i", ret);
|
||||
ret = SDL_SetRenderLogicalSize(renderer, w / factor, h / factor);
|
||||
ret = SDL_SetRenderLogicalPresentation(renderer, w / factor, h / factor,
|
||||
SDL_LOGICAL_PRESENTATION_LETTERBOX,
|
||||
SDL_ScaleModeNearest);
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderLogicalSize, expected: 0, got: %i", ret);
|
||||
viewport.x = (TESTRENDER_SCREEN_W / 4) / factor;
|
||||
viewport.y = (TESTRENDER_SCREEN_H / 4) / factor;
|
||||
@@ -928,7 +935,10 @@ int render_testLogicalSize(void *arg)
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret);
|
||||
ret = SDL_SetRenderViewport(renderer, NULL);
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderViewport, expected: 0, got: %i", ret);
|
||||
ret = SDL_SetRenderLogicalSize(renderer, 0, 0);
|
||||
(void)SDL_RenderPresent(renderer);
|
||||
ret = SDL_SetRenderLogicalPresentation(renderer, 0, 0,
|
||||
SDL_LOGICAL_PRESENTATION_DISABLED,
|
||||
SDL_ScaleModeNearest);
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderLogicalSize, expected: 0, got: %i", ret);
|
||||
|
||||
/* Check to see if final image matches. */
|
||||
@@ -953,15 +963,22 @@ int render_testLogicalSize(void *arg)
|
||||
clearScreen();
|
||||
|
||||
/* Set the logical size and do a fill operation */
|
||||
ret = SDL_GetRendererOutputSize(renderer, &w, &h);
|
||||
ret = SDL_GetCurrentRenderOutputSize(renderer, &w, &h);
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_GetRendererOutputSize, expected: 0, got: %i", ret);
|
||||
ret = SDL_SetRenderLogicalSize(renderer, w - 2 * (TESTRENDER_SCREEN_W / 4), h);
|
||||
ret = SDL_SetRenderLogicalPresentation(renderer,
|
||||
w - 2 * (TESTRENDER_SCREEN_W / 4),
|
||||
h,
|
||||
SDL_LOGICAL_PRESENTATION_LETTERBOX,
|
||||
SDL_ScaleModeLinear);
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderLogicalSize, expected: 0, got: %i", ret);
|
||||
ret = SDL_SetRenderDrawColor(renderer, 0, 255, 0, SDL_ALPHA_OPAQUE);
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret);
|
||||
ret = SDL_RenderFillRect(renderer, NULL);
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret);
|
||||
ret = SDL_SetRenderLogicalSize(renderer, 0, 0);
|
||||
(void)SDL_RenderPresent(renderer);
|
||||
ret = SDL_SetRenderLogicalPresentation(renderer, 0, 0,
|
||||
SDL_LOGICAL_PRESENTATION_DISABLED,
|
||||
SDL_ScaleModeNearest);
|
||||
SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderLogicalSize, expected: 0, got: %i", ret);
|
||||
|
||||
/* Check to see if final image matches. */
|
||||
|
||||
Reference in New Issue
Block a user