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:
Sam Lantinga 2023-02-03 12:25:46 -08:00
parent 93fc72a405
commit dcd17f5473
28 changed files with 1113 additions and 910 deletions

View file

@ -320,17 +320,15 @@
#define SDL_GetRenderDrawBlendMode SDL_GetRenderDrawBlendMode_REAL
#define SDL_GetRenderDrawColor SDL_GetRenderDrawColor_REAL
#define SDL_GetRenderDriver SDL_GetRenderDriver_REAL
#define SDL_GetRenderIntegerScale SDL_GetRenderIntegerScale_REAL
#define SDL_GetRenderLogicalSize SDL_GetRenderLogicalSize_REAL
#define SDL_GetRenderLogicalPresentation SDL_GetRenderLogicalPresentation_REAL
#define SDL_GetRenderMetalCommandEncoder SDL_GetRenderMetalCommandEncoder_REAL
#define SDL_GetRenderMetalLayer SDL_GetRenderMetalLayer_REAL
#define SDL_GetRenderScale SDL_GetRenderScale_REAL
#define SDL_GetRenderTarget SDL_GetRenderTarget_REAL
#define SDL_GetRenderViewport SDL_GetRenderViewport_REAL
#define SDL_GetRenderWindow SDL_GetRenderWindow_REAL
#define SDL_GetRenderer SDL_GetRenderer_REAL
#define SDL_GetRendererInfo SDL_GetRendererInfo_REAL
#define SDL_GetRendererOutputSize SDL_GetRendererOutputSize_REAL
#define SDL_GetCurrentRenderOutputSize SDL_GetCurrentRenderOutputSize_REAL
#define SDL_GetRevision SDL_GetRevision_REAL
#define SDL_GetScancodeFromKey SDL_GetScancodeFromKey_REAL
#define SDL_GetScancodeFromName SDL_GetScancodeFromName_REAL
@ -551,17 +549,16 @@
#define SDL_RenderGetD3D12Device SDL_RenderGetD3D12Device_REAL
#define SDL_RenderLine SDL_RenderLine_REAL
#define SDL_RenderLines SDL_RenderLines_REAL
#define SDL_RenderLogicalToWindow SDL_RenderLogicalToWindow_REAL
#define SDL_RenderCoordinatesToWindow SDL_RenderCoordinatesToWindow_REAL
#define SDL_RenderPoint SDL_RenderPoint_REAL
#define SDL_RenderPoints SDL_RenderPoints_REAL
#define SDL_RenderPresent SDL_RenderPresent_REAL
#define SDL_RenderReadPixels SDL_RenderReadPixels_REAL
#define SDL_RenderRect SDL_RenderRect_REAL
#define SDL_RenderRects SDL_RenderRects_REAL
#define SDL_RenderTargetSupported SDL_RenderTargetSupported_REAL
#define SDL_RenderTexture SDL_RenderTexture_REAL
#define SDL_RenderTextureRotated SDL_RenderTextureRotated_REAL
#define SDL_RenderWindowToLogical SDL_RenderWindowToLogical_REAL
#define SDL_RenderCoordinatesFromWindow SDL_RenderCoordinatesFromWindow_REAL
#define SDL_ReportAssertion SDL_ReportAssertion_REAL
#define SDL_ResetAssertionReport SDL_ResetAssertionReport_REAL
#define SDL_ResetHint SDL_ResetHint_REAL
@ -612,9 +609,7 @@
#define SDL_SetRenderClipRect SDL_SetRenderClipRect_REAL
#define SDL_SetRenderDrawBlendMode SDL_SetRenderDrawBlendMode_REAL
#define SDL_SetRenderDrawColor SDL_SetRenderDrawColor_REAL
#define SDL_SetRenderIntegerScale SDL_SetRenderIntegerScale_REAL
#define SDL_SetRenderLogicalSize SDL_SetRenderLogicalSize_REAL
#define SDL_SetRenderScale SDL_SetRenderScale_REAL
#define SDL_SetRenderLogicalPresentation SDL_SetRenderLogicalPresentation_REAL
#define SDL_SetRenderTarget SDL_SetRenderTarget_REAL
#define SDL_SetRenderVSync SDL_SetRenderVSync_REAL
#define SDL_SetRenderViewport SDL_SetRenderViewport_REAL
@ -866,3 +861,8 @@
#define SDL_GetPrimaryDisplay SDL_GetPrimaryDisplay_REAL
#define SDL_GetFullscreenDisplayModes SDL_GetFullscreenDisplayModes_REAL
#define SDL_GetClosestFullscreenDisplayMode SDL_GetClosestFullscreenDisplayMode_REAL
#define SDL_GetRenderOutputSize SDL_GetRenderOutputSize_REAL
#define SDL_ConvertEventToRenderCoordinates SDL_ConvertEventToRenderCoordinates_REAL
#define SDL_SetRenderScale SDL_SetRenderScale_REAL
#define SDL_GetRenderScale SDL_GetRenderScale_REAL
#define SDL_GetRenderWindowSize SDL_GetRenderWindowSize_REAL