mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-05 01:16:26 +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:
@@ -295,17 +295,15 @@ SDL3_0.0.0 {
|
||||
SDL_GetRenderDrawBlendMode;
|
||||
SDL_GetRenderDrawColor;
|
||||
SDL_GetRenderDriver;
|
||||
SDL_GetRenderIntegerScale;
|
||||
SDL_GetRenderLogicalSize;
|
||||
SDL_GetRenderLogicalPresentation;
|
||||
SDL_GetRenderMetalCommandEncoder;
|
||||
SDL_GetRenderMetalLayer;
|
||||
SDL_GetRenderScale;
|
||||
SDL_GetRenderTarget;
|
||||
SDL_GetRenderViewport;
|
||||
SDL_GetRenderWindow;
|
||||
SDL_GetRenderer;
|
||||
SDL_GetRendererInfo;
|
||||
SDL_GetRendererOutputSize;
|
||||
SDL_GetCurrentRenderOutputSize;
|
||||
SDL_GetRevision;
|
||||
SDL_GetScancodeFromKey;
|
||||
SDL_GetScancodeFromName;
|
||||
@@ -526,17 +524,16 @@ SDL3_0.0.0 {
|
||||
SDL_RenderGetD3D12Device;
|
||||
SDL_RenderLine;
|
||||
SDL_RenderLines;
|
||||
SDL_RenderLogicalToWindow;
|
||||
SDL_RenderCoordinatesToWindow;
|
||||
SDL_RenderPoint;
|
||||
SDL_RenderPoints;
|
||||
SDL_RenderPresent;
|
||||
SDL_RenderReadPixels;
|
||||
SDL_RenderRect;
|
||||
SDL_RenderRects;
|
||||
SDL_RenderTargetSupported;
|
||||
SDL_RenderTexture;
|
||||
SDL_RenderTextureRotated;
|
||||
SDL_RenderWindowToLogical;
|
||||
SDL_RenderCoordinatesFromWindow;
|
||||
SDL_ReportAssertion;
|
||||
SDL_ResetAssertionReport;
|
||||
SDL_ResetHint;
|
||||
@@ -587,9 +584,7 @@ SDL3_0.0.0 {
|
||||
SDL_SetRenderClipRect;
|
||||
SDL_SetRenderDrawBlendMode;
|
||||
SDL_SetRenderDrawColor;
|
||||
SDL_SetRenderIntegerScale;
|
||||
SDL_SetRenderLogicalSize;
|
||||
SDL_SetRenderScale;
|
||||
SDL_SetRenderLogicalPresentation;
|
||||
SDL_SetRenderTarget;
|
||||
SDL_SetRenderVSync;
|
||||
SDL_SetRenderViewport;
|
||||
@@ -839,6 +834,11 @@ SDL3_0.0.0 {
|
||||
SDL_GetPrimaryDisplay;
|
||||
SDL_GetFullscreenDisplayModes;
|
||||
SDL_GetClosestFullscreenDisplayMode;
|
||||
SDL_GetRenderOutputSize;
|
||||
SDL_ConvertEventToRenderCoordinates;
|
||||
SDL_SetRenderScale;
|
||||
SDL_GetRenderScale;
|
||||
SDL_GetRenderWindowSize;
|
||||
# extra symbols go here (don't modify this line)
|
||||
local: *;
|
||||
};
|
||||
|
@@ -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
|
||||
|
@@ -388,21 +388,19 @@ SDL_DYNAPI_PROC(void,SDL_GetRectUnion,(const SDL_Rect *a, const SDL_Rect *b, SDL
|
||||
SDL_DYNAPI_PROC(void,SDL_GetRectUnionFloat,(const SDL_FRect *a, const SDL_FRect *b, SDL_FRect *c),(a,b,c),)
|
||||
SDL_DYNAPI_PROC(SDL_bool,SDL_GetRelativeMouseMode,(void),(),return)
|
||||
SDL_DYNAPI_PROC(Uint32,SDL_GetRelativeMouseState,(float *a, float *b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(void,SDL_GetRenderClipRect,(SDL_Renderer *a, SDL_Rect *b),(a,b),)
|
||||
SDL_DYNAPI_PROC(int,SDL_GetRenderClipRect,(SDL_Renderer *a, SDL_Rect *b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_GetRenderDrawBlendMode,(SDL_Renderer *a, SDL_BlendMode *b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_GetRenderDrawColor,(SDL_Renderer *a, Uint8 *b, Uint8 *c, Uint8 *d, Uint8 *e),(a,b,c,d,e),return)
|
||||
SDL_DYNAPI_PROC(const char*,SDL_GetRenderDriver,(int a),(a),return)
|
||||
SDL_DYNAPI_PROC(SDL_bool,SDL_GetRenderIntegerScale,(SDL_Renderer *a),(a),return)
|
||||
SDL_DYNAPI_PROC(void,SDL_GetRenderLogicalSize,(SDL_Renderer *a, int *b, int *c),(a,b,c),)
|
||||
SDL_DYNAPI_PROC(int,SDL_GetRenderLogicalPresentation,(SDL_Renderer *a, int *b, int *c, SDL_RendererLogicalPresentation *d, SDL_ScaleMode *e),(a,b,c,d,e),return)
|
||||
SDL_DYNAPI_PROC(void*,SDL_GetRenderMetalCommandEncoder,(SDL_Renderer *a),(a),return)
|
||||
SDL_DYNAPI_PROC(void*,SDL_GetRenderMetalLayer,(SDL_Renderer *a),(a),return)
|
||||
SDL_DYNAPI_PROC(void,SDL_GetRenderScale,(SDL_Renderer *a, float *b, float *c),(a,b,c),)
|
||||
SDL_DYNAPI_PROC(SDL_Texture*,SDL_GetRenderTarget,(SDL_Renderer *a),(a),return)
|
||||
SDL_DYNAPI_PROC(void,SDL_GetRenderViewport,(SDL_Renderer *a, SDL_Rect *b),(a,b),)
|
||||
SDL_DYNAPI_PROC(int,SDL_GetRenderViewport,(SDL_Renderer *a, SDL_Rect *b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(SDL_Window*,SDL_GetRenderWindow,(SDL_Renderer *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)
|
||||
SDL_DYNAPI_PROC(int,SDL_GetRendererOutputSize,(SDL_Renderer *a, int *b, int *c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_GetCurrentRenderOutputSize,(SDL_Renderer *a, int *b, int *c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(const char*,SDL_GetRevision,(void),(),return)
|
||||
SDL_DYNAPI_PROC(SDL_Scancode,SDL_GetScancodeFromKey,(SDL_Keycode a),(a),return)
|
||||
SDL_DYNAPI_PROC(SDL_Scancode,SDL_GetScancodeFromName,(const char *a),(a),return)
|
||||
@@ -607,17 +605,16 @@ SDL_DYNAPI_PROC(int,SDL_RenderGeometry,(SDL_Renderer *a, SDL_Texture *b, const S
|
||||
SDL_DYNAPI_PROC(int,SDL_RenderGeometryRaw,(SDL_Renderer *a, SDL_Texture *b, const float *c, int d, const SDL_Color *e, int f, const float *g, int h, int i, const void *j, int k, int l),(a,b,c,d,e,f,g,h,i,j,k,l),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_RenderLine,(SDL_Renderer *a, float b, float c, float d, float e),(a,b,c,d,e),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_RenderLines,(SDL_Renderer *a, const SDL_FPoint *b, int c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(void,SDL_RenderLogicalToWindow,(SDL_Renderer *a, float b, float c, float *d, float *e),(a,b,c,d,e),)
|
||||
SDL_DYNAPI_PROC(int,SDL_RenderCoordinatesToWindow,(SDL_Renderer *a, float b, float c, float *d, float *e),(a,b,c,d,e),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_RenderPoint,(SDL_Renderer *a, float b, float c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_RenderPoints,(SDL_Renderer *a, const SDL_FPoint *b, int c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(void,SDL_RenderPresent,(SDL_Renderer *a),(a),)
|
||||
SDL_DYNAPI_PROC(int,SDL_RenderReadPixels,(SDL_Renderer *a, const SDL_Rect *b, Uint32 c, void *d, int e),(a,b,c,d,e),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_RenderRect,(SDL_Renderer *a, const SDL_FRect *b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_RenderRects,(SDL_Renderer *a, const SDL_FRect *b, int c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(SDL_bool,SDL_RenderTargetSupported,(SDL_Renderer *a),(a),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_RenderTexture,(SDL_Renderer *a, SDL_Texture *b, const SDL_Rect *c, const SDL_FRect *d),(a,b,c,d),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_RenderTextureRotated,(SDL_Renderer *a, SDL_Texture *b, const SDL_Rect *c, const SDL_FRect *d, const double e, const SDL_FPoint *f, const SDL_RendererFlip g),(a,b,c,d,e,f,g),return)
|
||||
SDL_DYNAPI_PROC(void,SDL_RenderWindowToLogical,(SDL_Renderer *a, float b, float c, float *d, float *e),(a,b,c,d,e),)
|
||||
SDL_DYNAPI_PROC(int,SDL_RenderCoordinatesFromWindow,(SDL_Renderer *a, float b, float c, float *d, float *e),(a,b,c,d,e),return)
|
||||
SDL_DYNAPI_PROC(SDL_AssertState,SDL_ReportAssertion,(SDL_AssertData *a, const char *b, const char *c, int d),(a,b,c,d),return)
|
||||
SDL_DYNAPI_PROC(void,SDL_ResetAssertionReport,(void),(),)
|
||||
SDL_DYNAPI_PROC(SDL_bool,SDL_ResetHint,(const char *a),(a),return)
|
||||
@@ -667,9 +664,7 @@ SDL_DYNAPI_PROC(int,SDL_SetRelativeMouseMode,(SDL_bool a),(a),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SetRenderClipRect,(SDL_Renderer *a, const SDL_Rect *b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SetRenderDrawBlendMode,(SDL_Renderer *a, SDL_BlendMode b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SetRenderDrawColor,(SDL_Renderer *a, Uint8 b, Uint8 c, Uint8 d, Uint8 e),(a,b,c,d,e),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SetRenderIntegerScale,(SDL_Renderer *a, SDL_bool b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SetRenderLogicalSize,(SDL_Renderer *a, int b, int c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SetRenderScale,(SDL_Renderer *a, float b, float c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SetRenderLogicalPresentation,(SDL_Renderer *a, int b, int c, SDL_RendererLogicalPresentation d, SDL_ScaleMode e),(a,b,c,d,e),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SetRenderTarget,(SDL_Renderer *a, SDL_Texture *b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SetRenderVSync,(SDL_Renderer *a, int b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SetRenderViewport,(SDL_Renderer *a, const SDL_Rect *b),(a,b),return)
|
||||
@@ -911,3 +906,8 @@ SDL_DYNAPI_PROC(SDL_DisplayID*,SDL_GetDisplays,(int *a),(a),return)
|
||||
SDL_DYNAPI_PROC(SDL_DisplayID,SDL_GetPrimaryDisplay,(void),(),return)
|
||||
SDL_DYNAPI_PROC(const SDL_DisplayMode**,SDL_GetFullscreenDisplayModes,(SDL_DisplayID a, int *b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(const SDL_DisplayMode*,SDL_GetClosestFullscreenDisplayMode,(SDL_DisplayID a, int b, int c, float d),(a,b,c,d),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_GetRenderOutputSize,(SDL_Renderer *a, int *b, int *c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_ConvertEventToRenderCoordinates,(SDL_Renderer *a, SDL_Event *b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_SetRenderScale,(SDL_Renderer *a, float b, float c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_GetRenderScale,(SDL_Renderer *a, float *b, float *c),(a,b,c),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_GetRenderWindowSize,(SDL_Renderer *a, int *b, int *c),(a,b,c),return)
|
||||
|
1162
src/render/SDL_render.c
Normal file → Executable file
1162
src/render/SDL_render.c
Normal file → Executable file
File diff suppressed because it is too large
Load Diff
@@ -45,18 +45,31 @@ typedef struct SDL_DRect
|
||||
|
||||
typedef struct SDL_RenderDriver SDL_RenderDriver;
|
||||
|
||||
/* Rendering view state */
|
||||
typedef struct SDL_RenderViewState
|
||||
{
|
||||
int pixel_w;
|
||||
int pixel_h;
|
||||
SDL_Rect viewport;
|
||||
SDL_Rect clip_rect;
|
||||
SDL_bool clipping_enabled;
|
||||
SDL_FPoint scale;
|
||||
|
||||
} SDL_RenderViewState;
|
||||
|
||||
/* Define the SDL texture structure */
|
||||
struct SDL_Texture
|
||||
{
|
||||
const void *magic;
|
||||
Uint32 format; /**< The pixel format of the texture */
|
||||
int access; /**< SDL_TextureAccess */
|
||||
int w; /**< The width of the texture */
|
||||
int h; /**< The height of the texture */
|
||||
int modMode; /**< The texture modulation mode */
|
||||
SDL_BlendMode blendMode; /**< The texture blend mode */
|
||||
SDL_ScaleMode scaleMode; /**< The texture scale mode */
|
||||
SDL_Color color; /**< Texture modulation values */
|
||||
Uint32 format; /**< The pixel format of the texture */
|
||||
int access; /**< SDL_TextureAccess */
|
||||
int w; /**< The width of the texture */
|
||||
int h; /**< The height of the texture */
|
||||
int modMode; /**< The texture modulation mode */
|
||||
SDL_BlendMode blendMode; /**< The texture blend mode */
|
||||
SDL_ScaleMode scaleMode; /**< The texture scale mode */
|
||||
SDL_Color color; /**< Texture modulation values */
|
||||
SDL_RenderViewState view; /**< Target texture view state */
|
||||
|
||||
SDL_Renderer *renderer;
|
||||
|
||||
@@ -212,37 +225,19 @@ struct SDL_Renderer
|
||||
Uint64 simulate_vsync_interval_ns;
|
||||
Uint64 last_present;
|
||||
|
||||
/* The logical resolution for rendering */
|
||||
int logical_w;
|
||||
int logical_h;
|
||||
int logical_w_backup;
|
||||
int logical_h_backup;
|
||||
/* Support for logical output coordinates */
|
||||
SDL_Texture *logical_target;
|
||||
SDL_RendererLogicalPresentation logical_presentation_mode;
|
||||
SDL_ScaleMode logical_scale_mode;
|
||||
SDL_Rect logical_src_rect;
|
||||
SDL_FRect logical_dst_rect;
|
||||
|
||||
/* Whether or not to force the viewport to even integer intervals */
|
||||
SDL_bool integer_scale;
|
||||
SDL_RenderViewState *view;
|
||||
SDL_RenderViewState main_view;
|
||||
|
||||
/* The drawable area within the window */
|
||||
SDL_DRect viewport;
|
||||
SDL_DRect viewport_backup;
|
||||
|
||||
/* The clip rectangle within the window */
|
||||
SDL_DRect clip_rect;
|
||||
SDL_DRect clip_rect_backup;
|
||||
|
||||
/* Whether or not the clipping rectangle is used. */
|
||||
SDL_bool clipping_enabled;
|
||||
SDL_bool clipping_enabled_backup;
|
||||
|
||||
/* The render output coordinate scale */
|
||||
SDL_FPoint scale;
|
||||
SDL_FPoint scale_backup;
|
||||
|
||||
/* The pixel to point coordinate scale */
|
||||
/* The window pixel to point coordinate scale */
|
||||
SDL_FPoint dpi_scale;
|
||||
|
||||
/* Whether or not to scale relative mouse motion */
|
||||
SDL_bool relative_scaling;
|
||||
|
||||
/* The method of drawing lines */
|
||||
SDL_RenderLineMethod line_method;
|
||||
|
||||
@@ -264,8 +259,8 @@ struct SDL_Renderer
|
||||
SDL_RenderCommand *render_commands_pool;
|
||||
Uint32 render_command_generation;
|
||||
Uint32 last_queued_color;
|
||||
SDL_DRect last_queued_viewport;
|
||||
SDL_DRect last_queued_cliprect;
|
||||
SDL_Rect last_queued_viewport;
|
||||
SDL_Rect last_queued_cliprect;
|
||||
SDL_bool last_queued_cliprect_enabled;
|
||||
SDL_bool color_queued;
|
||||
SDL_bool viewport_queued;
|
||||
|
@@ -337,12 +337,6 @@ static void D3D_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event
|
||||
}
|
||||
}
|
||||
|
||||
static int D3D_GetOutputSize(SDL_Renderer *renderer, int *w, int *h)
|
||||
{
|
||||
SDL_GetWindowSizeInPixels(renderer->window, w, h);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static D3DBLEND GetBlendFunc(SDL_BlendFactor factor)
|
||||
{
|
||||
switch (factor) {
|
||||
@@ -1586,7 +1580,6 @@ D3D_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
}
|
||||
|
||||
renderer->WindowEvent = D3D_WindowEvent;
|
||||
renderer->GetOutputSize = D3D_GetOutputSize;
|
||||
renderer->SupportsBlendMode = D3D_SupportsBlendMode;
|
||||
renderer->CreateTexture = D3D_CreateTexture;
|
||||
renderer->UpdateTexture = D3D_UpdateTexture;
|
||||
@@ -1609,7 +1602,7 @@ D3D_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
renderer->DestroyRenderer = D3D_DestroyRenderer;
|
||||
renderer->SetVSync = D3D_SetVSync;
|
||||
renderer->info = D3D_RenderDriver.info;
|
||||
renderer->info.flags = (SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
|
||||
renderer->info.flags = SDL_RENDERER_ACCELERATED;
|
||||
renderer->driverdata = data;
|
||||
|
||||
SDL_GetWindowSizeInPixels(window, &w, &h);
|
||||
@@ -1727,7 +1720,7 @@ D3D_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
SDL_RenderDriver D3D_RenderDriver = {
|
||||
D3D_CreateRenderer,
|
||||
{ "direct3d",
|
||||
(SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE),
|
||||
(SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC),
|
||||
1,
|
||||
{ SDL_PIXELFORMAT_ARGB8888 },
|
||||
0,
|
||||
|
@@ -1033,14 +1033,6 @@ static void D3D11_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *eve
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(__WINRT__)
|
||||
static int D3D11_GetOutputSize(SDL_Renderer *renderer, int *w, int *h)
|
||||
{
|
||||
SDL_GetWindowSizeInPixels(renderer->window, w, h);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static SDL_bool D3D11_SupportsBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode)
|
||||
{
|
||||
SDL_BlendFactor srcColorFactor = SDL_GetBlendModeSrcColorFactor(blendMode);
|
||||
@@ -2324,9 +2316,6 @@ D3D11_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
data->identity = MatrixIdentity();
|
||||
|
||||
renderer->WindowEvent = D3D11_WindowEvent;
|
||||
#if !defined(__WINRT__)
|
||||
renderer->GetOutputSize = D3D11_GetOutputSize;
|
||||
#endif
|
||||
renderer->SupportsBlendMode = D3D11_SupportsBlendMode;
|
||||
renderer->CreateTexture = D3D11_CreateTexture;
|
||||
renderer->UpdateTexture = D3D11_UpdateTexture;
|
||||
@@ -2349,7 +2338,7 @@ D3D11_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
renderer->DestroyTexture = D3D11_DestroyTexture;
|
||||
renderer->DestroyRenderer = D3D11_DestroyRenderer;
|
||||
renderer->info = D3D11_RenderDriver.info;
|
||||
renderer->info.flags = (SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
|
||||
renderer->info.flags = SDL_RENDERER_ACCELERATED;
|
||||
renderer->driverdata = data;
|
||||
|
||||
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
|
||||
@@ -2394,12 +2383,10 @@ SDL_RenderDriver D3D11_RenderDriver = {
|
||||
D3D11_CreateRenderer,
|
||||
{
|
||||
"direct3d11",
|
||||
(
|
||||
SDL_RENDERER_ACCELERATED |
|
||||
SDL_RENDERER_PRESENTVSYNC |
|
||||
SDL_RENDERER_TARGETTEXTURE), /* flags. see SDL_RendererFlags */
|
||||
6, /* num_texture_formats */
|
||||
{ /* texture_formats */
|
||||
(SDL_RENDERER_ACCELERATED |
|
||||
SDL_RENDERER_PRESENTVSYNC), /* flags. see SDL_RendererFlags */
|
||||
6, /* num_texture_formats */
|
||||
{ /* texture_formats */
|
||||
SDL_PIXELFORMAT_ARGB8888,
|
||||
SDL_PIXELFORMAT_RGB888,
|
||||
SDL_PIXELFORMAT_YV12,
|
||||
|
@@ -502,12 +502,6 @@ static void D3D12_DestroyRenderer(SDL_Renderer *renderer)
|
||||
SDL_free(renderer);
|
||||
}
|
||||
|
||||
static int D3D12_GetOutputSize(SDL_Renderer *renderer, int *w, int *h)
|
||||
{
|
||||
SDL_GetWindowSizeInPixels(renderer->window, w, h);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static D3D12_BLEND GetBlendFunc(SDL_BlendFactor factor)
|
||||
{
|
||||
switch (factor) {
|
||||
@@ -2972,7 +2966,6 @@ D3D12_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
data->identity = MatrixIdentity();
|
||||
|
||||
renderer->WindowEvent = D3D12_WindowEvent;
|
||||
renderer->GetOutputSize = D3D12_GetOutputSize;
|
||||
renderer->SupportsBlendMode = D3D12_SupportsBlendMode;
|
||||
renderer->CreateTexture = D3D12_CreateTexture;
|
||||
renderer->UpdateTexture = D3D12_UpdateTexture;
|
||||
@@ -2995,7 +2988,7 @@ D3D12_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
renderer->DestroyTexture = D3D12_DestroyTexture;
|
||||
renderer->DestroyRenderer = D3D12_DestroyRenderer;
|
||||
renderer->info = D3D12_RenderDriver.info;
|
||||
renderer->info.flags = (SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
|
||||
renderer->info.flags = SDL_RENDERER_ACCELERATED;
|
||||
renderer->driverdata = data;
|
||||
|
||||
if ((flags & SDL_RENDERER_PRESENTVSYNC)) {
|
||||
@@ -3025,12 +3018,10 @@ SDL_RenderDriver D3D12_RenderDriver = {
|
||||
D3D12_CreateRenderer,
|
||||
{
|
||||
"direct3d12",
|
||||
(
|
||||
SDL_RENDERER_ACCELERATED |
|
||||
SDL_RENDERER_PRESENTVSYNC |
|
||||
SDL_RENDERER_TARGETTEXTURE), /* flags. see SDL_RendererFlags */
|
||||
6, /* num_texture_formats */
|
||||
{ /* texture_formats */
|
||||
(SDL_RENDERER_ACCELERATED |
|
||||
SDL_RENDERER_PRESENTVSYNC), /* flags. see SDL_RendererFlags */
|
||||
6, /* num_texture_formats */
|
||||
{ /* texture_formats */
|
||||
SDL_PIXELFORMAT_ARGB8888,
|
||||
SDL_PIXELFORMAT_RGB888,
|
||||
SDL_PIXELFORMAT_YV12,
|
||||
|
@@ -1911,7 +1911,7 @@ static SDL_Renderer *METAL_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
renderer->GetMetalCommandEncoder = METAL_GetMetalCommandEncoder;
|
||||
|
||||
renderer->info = METAL_RenderDriver.info;
|
||||
renderer->info.flags = (SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
|
||||
renderer->info.flags = SDL_RENDERER_ACCELERATED;
|
||||
|
||||
renderer->always_batch = SDL_TRUE;
|
||||
|
||||
@@ -1972,7 +1972,7 @@ SDL_RenderDriver METAL_RenderDriver = {
|
||||
METAL_CreateRenderer,
|
||||
{
|
||||
"metal",
|
||||
(SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE),
|
||||
(SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC),
|
||||
6,
|
||||
{ SDL_PIXELFORMAT_ARGB8888,
|
||||
SDL_PIXELFORMAT_ABGR8888,
|
||||
|
@@ -331,12 +331,6 @@ static void GL_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event)
|
||||
}
|
||||
}
|
||||
|
||||
static int GL_GetOutputSize(SDL_Renderer *renderer, int *w, int *h)
|
||||
{
|
||||
SDL_GetWindowSizeInPixels(renderer->window, w, h);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static GLenum GetBlendFunc(SDL_BlendFactor factor)
|
||||
{
|
||||
switch (factor) {
|
||||
@@ -1440,7 +1434,7 @@ static int GL_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect,
|
||||
return SDL_OutOfMemory();
|
||||
}
|
||||
|
||||
SDL_GetRendererOutputSize(renderer, &w, &h);
|
||||
SDL_GetCurrentRenderOutputSize(renderer, &w, &h);
|
||||
|
||||
data->glPixelStorei(GL_PACK_ALIGNMENT, 1);
|
||||
data->glPixelStorei(GL_PACK_ROW_LENGTH,
|
||||
@@ -1749,7 +1743,6 @@ static SDL_Renderer *GL_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
}
|
||||
|
||||
renderer->WindowEvent = GL_WindowEvent;
|
||||
renderer->GetOutputSize = GL_GetOutputSize;
|
||||
renderer->SupportsBlendMode = GL_SupportsBlendMode;
|
||||
renderer->CreateTexture = GL_CreateTexture;
|
||||
renderer->UpdateTexture = GL_UpdateTexture;
|
||||
@@ -1935,9 +1928,13 @@ static SDL_Renderer *GL_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
SDL_GL_GetProcAddress("glBindFramebufferEXT");
|
||||
data->glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)
|
||||
SDL_GL_GetProcAddress("glCheckFramebufferStatusEXT");
|
||||
renderer->info.flags |= SDL_RENDERER_TARGETTEXTURE;
|
||||
} else {
|
||||
SDL_SetError("Can't create render targets, GL_EXT_framebuffer_object not available");
|
||||
SDL_GL_DeleteContext(data->context);
|
||||
SDL_free(renderer);
|
||||
SDL_free(data);
|
||||
goto error;
|
||||
}
|
||||
data->framebuffers = NULL;
|
||||
|
||||
/* Set up parameters for rendering */
|
||||
data->glMatrixMode(GL_MODELVIEW);
|
||||
@@ -1972,7 +1969,7 @@ error:
|
||||
SDL_RenderDriver GL_RenderDriver = {
|
||||
GL_CreateRenderer,
|
||||
{ "opengl",
|
||||
(SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE),
|
||||
(SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC),
|
||||
4,
|
||||
{ SDL_PIXELFORMAT_ARGB8888,
|
||||
SDL_PIXELFORMAT_ABGR8888,
|
||||
|
@@ -311,12 +311,6 @@ static void GLES2_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *eve
|
||||
}
|
||||
}
|
||||
|
||||
static int GLES2_GetOutputSize(SDL_Renderer *renderer, int *w, int *h)
|
||||
{
|
||||
SDL_GetWindowSizeInPixels(renderer->window, w, h);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static GLenum GetBlendFunc(SDL_BlendFactor factor)
|
||||
{
|
||||
switch (factor) {
|
||||
@@ -1935,7 +1929,7 @@ static int GLES2_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect,
|
||||
return SDL_OutOfMemory();
|
||||
}
|
||||
|
||||
SDL_GetRendererOutputSize(renderer, &w, &h);
|
||||
SDL_GetCurrentRenderOutputSize(renderer, &w, &h);
|
||||
|
||||
data->glReadPixels(rect->x, renderer->target ? rect->y : (h - rect->y) - rect->h,
|
||||
rect->w, rect->h, GL_RGBA, GL_UNSIGNED_BYTE, temp_pixels);
|
||||
@@ -2109,7 +2103,7 @@ static SDL_Renderer *GLES2_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
goto error;
|
||||
}
|
||||
renderer->info = GLES2_RenderDriver.info;
|
||||
renderer->info.flags = (SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
|
||||
renderer->info.flags = SDL_RENDERER_ACCELERATED;
|
||||
renderer->driverdata = data;
|
||||
renderer->window = window;
|
||||
|
||||
@@ -2190,7 +2184,6 @@ static SDL_Renderer *GLES2_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
|
||||
/* Populate the function pointers for the module */
|
||||
renderer->WindowEvent = GLES2_WindowEvent;
|
||||
renderer->GetOutputSize = GLES2_GetOutputSize;
|
||||
renderer->SupportsBlendMode = GLES2_SupportsBlendMode;
|
||||
renderer->CreateTexture = GLES2_CreateTexture;
|
||||
renderer->UpdateTexture = GLES2_UpdateTexture;
|
||||
@@ -2272,7 +2265,7 @@ error:
|
||||
SDL_RenderDriver GLES2_RenderDriver = {
|
||||
GLES2_CreateRenderer,
|
||||
{ "opengles2",
|
||||
(SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE),
|
||||
(SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC),
|
||||
4,
|
||||
{ SDL_PIXELFORMAT_ARGB8888,
|
||||
SDL_PIXELFORMAT_ABGR8888,
|
||||
|
@@ -665,7 +665,7 @@ SDL_RenderDriver PS2_RenderDriver = {
|
||||
.CreateRenderer = PS2_CreateRenderer,
|
||||
.info = {
|
||||
.name = "PS2 gsKit",
|
||||
.flags = SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE,
|
||||
.flags = (SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC),
|
||||
.num_texture_formats = 2,
|
||||
.texture_formats = {
|
||||
[0] = SDL_PIXELFORMAT_ABGR1555,
|
||||
|
@@ -1333,7 +1333,7 @@ PSP_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
renderer->DestroyRenderer = PSP_DestroyRenderer;
|
||||
renderer->SetVSync = PSP_SetVSync;
|
||||
renderer->info = PSP_RenderDriver.info;
|
||||
renderer->info.flags = (SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
|
||||
renderer->info.flags = SDL_RENDERER_ACCELERATED;
|
||||
renderer->driverdata = data;
|
||||
renderer->window = window;
|
||||
|
||||
@@ -1407,7 +1407,7 @@ SDL_RenderDriver PSP_RenderDriver = {
|
||||
.CreateRenderer = PSP_CreateRenderer,
|
||||
.info = {
|
||||
.name = "PSP",
|
||||
.flags = SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE,
|
||||
.flags = (SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC),
|
||||
.num_texture_formats = 4,
|
||||
.texture_formats = {
|
||||
[0] = SDL_PIXELFORMAT_BGR565,
|
||||
|
@@ -1175,7 +1175,7 @@ static SDL_Renderer *SW_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
SDL_RenderDriver SW_RenderDriver = {
|
||||
SW_CreateRenderer,
|
||||
{ "software",
|
||||
SDL_RENDERER_SOFTWARE | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE,
|
||||
(SDL_RENDERER_SOFTWARE | SDL_RENDERER_PRESENTVSYNC),
|
||||
0,
|
||||
{ /* formats filled in later */
|
||||
SDL_PIXELFORMAT_UNKNOWN },
|
||||
|
@@ -102,7 +102,7 @@ SDL_RenderDriver VITA_GXM_RenderDriver = {
|
||||
.CreateRenderer = VITA_GXM_CreateRenderer,
|
||||
.info = {
|
||||
.name = "VITA gxm",
|
||||
.flags = SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE,
|
||||
.flags = (SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC),
|
||||
.num_texture_formats = 8,
|
||||
.texture_formats = {
|
||||
[0] = SDL_PIXELFORMAT_ABGR8888,
|
||||
@@ -253,7 +253,7 @@ VITA_GXM_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
renderer->SetVSync = VITA_GXM_SetVSync;
|
||||
|
||||
renderer->info = VITA_GXM_RenderDriver.info;
|
||||
renderer->info.flags = (SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
|
||||
renderer->info.flags = SDL_RENDERER_ACCELERATED;
|
||||
renderer->driverdata = data;
|
||||
renderer->window = window;
|
||||
|
||||
@@ -1106,7 +1106,7 @@ static int VITA_GXM_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rec
|
||||
return SDL_OutOfMemory();
|
||||
}
|
||||
|
||||
SDL_GetRendererOutputSize(renderer, &w, &h);
|
||||
SDL_GetCurrentRenderOutputSize(renderer, &w, &h);
|
||||
|
||||
read_pixels(rect->x, renderer->target ? rect->y : (h - rect->y) - rect->h,
|
||||
rect->w, rect->h, temp_pixels);
|
||||
|
@@ -30,6 +30,8 @@ static const char *video_usage[] = {
|
||||
"[--fullscreen | --fullscreen-desktop | --windows N]", "[--title title]",
|
||||
"[--icon icon.bmp]", "[--center | --position X,Y]", "[--geometry WxH]",
|
||||
"[--min-geometry WxH]", "[--max-geometry WxH]", "[--logical WxH]",
|
||||
"[--logical-presentation disabled|match|stretch|letterbox|overscan|integer_scale]",
|
||||
"[--logical-scale-quality nearest|linear|best]",
|
||||
"[--scale N]", "[--depth N]", "[--refresh R]", "[--vsync]", "[--noframe]",
|
||||
"[--resizable]", "[--minimize]", "[--maximize]", "[--grab]", "[--keyboard-grab]",
|
||||
"[--hidden]", "[--input-focus]", "[--mouse-focus]",
|
||||
@@ -83,6 +85,8 @@ SDLTest_CommonCreateState(char **argv, Uint32 flags)
|
||||
state->window_y = SDL_WINDOWPOS_UNDEFINED;
|
||||
state->window_w = DEFAULT_WINDOW_WIDTH;
|
||||
state->window_h = DEFAULT_WINDOW_HEIGHT;
|
||||
state->logical_presentation = SDL_LOGICAL_PRESENTATION_MATCH;
|
||||
state->logical_scale_mode = SDL_ScaleModeLinear;
|
||||
state->num_windows = 1;
|
||||
state->audiospec.freq = 22050;
|
||||
state->audiospec.format = AUDIO_S16;
|
||||
@@ -399,6 +403,56 @@ int SDLTest_CommonArg(SDLTest_CommonState *state, int index)
|
||||
state->logical_h = SDL_atoi(h);
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--logical-presentation") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "disabled") == 0) {
|
||||
state->logical_presentation = SDL_LOGICAL_PRESENTATION_DISABLED;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "match") == 0) {
|
||||
state->logical_presentation = SDL_LOGICAL_PRESENTATION_MATCH;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "stretch") == 0) {
|
||||
state->logical_presentation = SDL_LOGICAL_PRESENTATION_STRETCH;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "letterbox") == 0) {
|
||||
state->logical_presentation = SDL_LOGICAL_PRESENTATION_LETTERBOX;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "overscan") == 0) {
|
||||
state->logical_presentation = SDL_LOGICAL_PRESENTATION_OVERSCAN;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "integer_scale") == 0) {
|
||||
state->logical_presentation = SDL_LOGICAL_PRESENTATION_INTEGER_SCALE;
|
||||
return 2;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--logical-scale-quality") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
return -1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "nearest") == 0) {
|
||||
state->logical_scale_mode = SDL_ScaleModeNearest;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "linear") == 0) {
|
||||
state->logical_scale_mode = SDL_ScaleModeLinear;
|
||||
return 2;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "best") == 0) {
|
||||
state->logical_scale_mode = SDL_ScaleModeBest;
|
||||
return 2;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
if (SDL_strcasecmp(argv[index], "--scale") == 0) {
|
||||
++index;
|
||||
if (!argv[index]) {
|
||||
@@ -803,9 +857,6 @@ static void SDLTest_PrintRendererFlag(char *text, size_t maxlen, Uint32 flag)
|
||||
case SDL_RENDERER_PRESENTVSYNC:
|
||||
SDL_snprintfcat(text, maxlen, "PresentVSync");
|
||||
break;
|
||||
case SDL_RENDERER_TARGETTEXTURE:
|
||||
SDL_snprintfcat(text, maxlen, "TargetTexturesSupported");
|
||||
break;
|
||||
default:
|
||||
SDL_snprintfcat(text, maxlen, "0x%8.8x", flag);
|
||||
break;
|
||||
@@ -920,6 +971,51 @@ static void SDLTest_PrintPixelFormat(char *text, size_t maxlen, Uint32 format)
|
||||
}
|
||||
}
|
||||
|
||||
static void SDLTest_PrintLogicalPresentation(char *text, size_t maxlen, SDL_RendererLogicalPresentation logical_presentation)
|
||||
{
|
||||
switch (logical_presentation) {
|
||||
case SDL_LOGICAL_PRESENTATION_DISABLED:
|
||||
SDL_snprintfcat(text, maxlen, "DISABLED");
|
||||
break;
|
||||
case SDL_LOGICAL_PRESENTATION_MATCH:
|
||||
SDL_snprintfcat(text, maxlen, "MATCH");
|
||||
break;
|
||||
case SDL_LOGICAL_PRESENTATION_STRETCH:
|
||||
SDL_snprintfcat(text, maxlen, "STRETCH");
|
||||
break;
|
||||
case SDL_LOGICAL_PRESENTATION_LETTERBOX:
|
||||
SDL_snprintfcat(text, maxlen, "LETTERBOX");
|
||||
break;
|
||||
case SDL_LOGICAL_PRESENTATION_OVERSCAN:
|
||||
SDL_snprintfcat(text, maxlen, "OVERSCAN");
|
||||
break;
|
||||
case SDL_LOGICAL_PRESENTATION_INTEGER_SCALE:
|
||||
SDL_snprintfcat(text, maxlen, "INTEGER_SCALE");
|
||||
break;
|
||||
default:
|
||||
SDL_snprintfcat(text, maxlen, "0x%8.8x", logical_presentation);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void SDLTest_PrintScaleMode(char *text, size_t maxlen, SDL_ScaleMode scale_mode)
|
||||
{
|
||||
switch (scale_mode) {
|
||||
case SDL_ScaleModeNearest:
|
||||
SDL_snprintfcat(text, maxlen, "NEAREST");
|
||||
break;
|
||||
case SDL_ScaleModeLinear:
|
||||
SDL_snprintfcat(text, maxlen, "LINEAR");
|
||||
break;
|
||||
case SDL_ScaleModeBest:
|
||||
SDL_snprintfcat(text, maxlen, "BEST");
|
||||
break;
|
||||
default:
|
||||
SDL_snprintfcat(text, maxlen, "0x%8.8x", scale_mode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void SDLTest_PrintRenderer(SDL_RendererInfo *info)
|
||||
{
|
||||
int i, count;
|
||||
@@ -1298,9 +1394,15 @@ SDLTest_CommonInit(SDLTest_CommonState *state)
|
||||
SDL_GetError());
|
||||
return SDL_FALSE;
|
||||
}
|
||||
if (state->logical_w && state->logical_h) {
|
||||
SDL_SetRenderLogicalSize(state->renderers[i], state->logical_w, state->logical_h);
|
||||
} else if (state->scale != 0.) {
|
||||
if (state->logical_w == 0 || state->logical_h == 0) {
|
||||
state->logical_w = state->window_w;
|
||||
state->logical_h = state->window_h;
|
||||
}
|
||||
if (SDL_SetRenderLogicalPresentation(state->renderers[i], state->logical_w, state->logical_h, state->logical_presentation, state->logical_scale_mode) < 0) {
|
||||
SDL_Log("Couldn't set logical presentation: %s\n", SDL_GetError());
|
||||
return SDL_FALSE;
|
||||
}
|
||||
if (state->scale != 0.0f) {
|
||||
SDL_SetRenderScale(state->renderers[i], state->scale, state->scale);
|
||||
}
|
||||
if (state->verbose & VERBOSE_RENDER) {
|
||||
@@ -2204,6 +2306,8 @@ void SDLTest_CommonDrawWindowInfo(SDL_Renderer *renderer, SDL_Window *window, fl
|
||||
Uint32 flags;
|
||||
SDL_DisplayID windowDisplayID = SDL_GetDisplayForWindow(window);
|
||||
SDL_RendererInfo info;
|
||||
SDL_RendererLogicalPresentation logical_presentation;
|
||||
SDL_ScaleMode logical_scale_mode;
|
||||
|
||||
/* Video */
|
||||
|
||||
@@ -2231,8 +2335,14 @@ void SDLTest_CommonDrawWindowInfo(SDL_Renderer *renderer, SDL_Window *window, fl
|
||||
textY += lineHeight;
|
||||
}
|
||||
|
||||
if (0 == SDL_GetRendererOutputSize(renderer, &w, &h)) {
|
||||
(void)SDL_snprintf(text, sizeof text, "SDL_GetRendererOutputSize: %dx%d", w, h);
|
||||
if (0 == SDL_GetRenderOutputSize(renderer, &w, &h)) {
|
||||
(void)SDL_snprintf(text, sizeof text, "SDL_GetRenderOutputSize: %dx%d", w, h);
|
||||
SDLTest_DrawString(renderer, 0.0f, textY, text);
|
||||
textY += lineHeight;
|
||||
}
|
||||
|
||||
if (0 == SDL_GetCurrentRenderOutputSize(renderer, &w, &h)) {
|
||||
(void)SDL_snprintf(text, sizeof text, "SDL_GetCurrentRenderOutputSize: %dx%d", w, h);
|
||||
SDLTest_DrawString(renderer, 0.0f, textY, text);
|
||||
textY += lineHeight;
|
||||
}
|
||||
@@ -2244,13 +2354,16 @@ void SDLTest_CommonDrawWindowInfo(SDL_Renderer *renderer, SDL_Window *window, fl
|
||||
textY += lineHeight;
|
||||
|
||||
SDL_GetRenderScale(renderer, &scaleX, &scaleY);
|
||||
(void)SDL_snprintf(text, sizeof text, "SDL_GetRenderScale: %f,%f",
|
||||
(void)SDL_snprintf(text, sizeof text, "SDL_GetRenderScale: %g,%g",
|
||||
scaleX, scaleY);
|
||||
SDLTest_DrawString(renderer, 0.0f, textY, text);
|
||||
textY += lineHeight;
|
||||
|
||||
SDL_GetRenderLogicalSize(renderer, &w, &h);
|
||||
(void)SDL_snprintf(text, sizeof text, "SDL_GetRenderLogicalSize: %dx%d", w, h);
|
||||
SDL_GetRenderLogicalPresentation(renderer, &w, &h, &logical_presentation, &logical_scale_mode);
|
||||
(void)SDL_snprintf(text, sizeof text, "SDL_GetRenderLogicalPresentation: %dx%d ", w, h);
|
||||
SDLTest_PrintLogicalPresentation(text, sizeof text, logical_presentation);
|
||||
SDL_snprintfcat(text, sizeof text, ", ");
|
||||
SDLTest_PrintScaleMode(text, sizeof text, logical_scale_mode);
|
||||
SDLTest_DrawString(renderer, 0.0f, textY, text);
|
||||
textY += lineHeight;
|
||||
|
||||
|
Reference in New Issue
Block a user