From d7c17d10a7446a219835bb9ede9bd438af0d3af1 Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Tue, 14 May 2024 01:11:32 +0300
Subject: [PATCH] update after latest SDL3 renderer changes
---
src/sdl2_compat.c | 42 ++++++++++++++++++++++++++++--------------
src/sdl3_syms.h | 2 +-
2 files changed, 29 insertions(+), 15 deletions(-)
diff --git a/src/sdl2_compat.c b/src/sdl2_compat.c
index 9e94502..b43956f 100644
--- a/src/sdl2_compat.c
+++ b/src/sdl2_compat.c
@@ -789,6 +789,7 @@ BOOL WINAPI _DllMainCRTStartup(HANDLE dllhandle, DWORD reason, LPVOID reserved)
#define SDL2_RENDERER_SOFTWARE 0x00000001
#define SDL2_RENDERER_ACCELERATED 0x00000002
+#define SDL2_RENDERER_PRESENTVSYNC 0x00000004
#define SDL2_RENDERER_TARGETTEXTURE 0x00000008
/* Events changed in SDL3; notably, the `timestamp` field moved from
@@ -3836,6 +3837,7 @@ DECLSPEC int SDLCALL
SDL_GetRendererInfo(SDL_Renderer *renderer, SDL2_RendererInfo *info)
{
SDL_RendererInfo info3;
+ SDL_PropertiesID props;
unsigned int i;
SDL3_zerop(info);
@@ -3843,11 +3845,21 @@ SDL_GetRendererInfo(SDL_Renderer *renderer, SDL2_RendererInfo *info)
return -1;
}
+ props = SDL3_GetRendererProperties(renderer);
+
info->name = info3.name;
- info->flags = info3.flags;
info->num_texture_formats = info3.num_texture_formats;
- info->max_texture_width = info3.max_texture_width;
- info->max_texture_height = info3.max_texture_height;
+ info->max_texture_width = (int)SDL3_GetNumberProperty(props, SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 0);
+ info->max_texture_height = info->max_texture_width;
+
+ if (SDL3_strcmp(info->name, SDL_SOFTWARE_RENDERER) == 0) {
+ info->flags = SDL2_RENDERER_SOFTWARE | SDL2_RENDERER_TARGETTEXTURE;
+ } else {
+ info->flags = SDL2_RENDERER_ACCELERATED | SDL2_RENDERER_TARGETTEXTURE;
+ }
+ if (SDL3_GetNumberProperty(props, SDL_PROP_RENDERER_VSYNC_NUMBER, 0)) {
+ info->flags |= SDL2_RENDERER_PRESENTVSYNC;
+ }
if (info->num_texture_formats > 16) {
info->num_texture_formats = 16;
@@ -3872,22 +3884,22 @@ SDL_GetRenderDriverInfo(int idx, SDL2_RendererInfo *info)
/* these are the values that SDL2 returns. */
if ((SDL3_strcmp(name, "opengl") == 0) || (SDL3_strcmp(name, "opengles2") == 0)) {
- info->flags = SDL2_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL2_RENDERER_TARGETTEXTURE;
+ info->flags = SDL2_RENDERER_ACCELERATED | SDL2_RENDERER_PRESENTVSYNC | SDL2_RENDERER_TARGETTEXTURE;
info->num_texture_formats = 4;
info->texture_formats[0] = SDL_PIXELFORMAT_ARGB8888;
info->texture_formats[1] = SDL_PIXELFORMAT_ABGR8888;
info->texture_formats[2] = SDL_PIXELFORMAT_XRGB8888;
info->texture_formats[3] = SDL_PIXELFORMAT_XBGR8888;
} else if (SDL3_strcmp(name, "opengles") == 0) {
- info->flags = SDL2_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC;
+ info->flags = SDL2_RENDERER_ACCELERATED | SDL2_RENDERER_PRESENTVSYNC;
info->num_texture_formats = 1;
info->texture_formats[0] = SDL_PIXELFORMAT_ABGR8888;
} else if (SDL3_strcmp(name, "direct3d") == 0) {
- info->flags = SDL2_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL2_RENDERER_TARGETTEXTURE;
+ info->flags = SDL2_RENDERER_ACCELERATED | SDL2_RENDERER_PRESENTVSYNC | SDL2_RENDERER_TARGETTEXTURE;
info->num_texture_formats = 1;
info->texture_formats[0] = SDL_PIXELFORMAT_ARGB8888;
} else if (SDL3_strcmp(name, "direct3d11") == 0) {
- info->flags = SDL2_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL2_RENDERER_TARGETTEXTURE;
+ info->flags = SDL2_RENDERER_ACCELERATED | SDL2_RENDERER_PRESENTVSYNC | SDL2_RENDERER_TARGETTEXTURE;
info->num_texture_formats = 6;
info->texture_formats[0] = SDL_PIXELFORMAT_ARGB8888;
info->texture_formats[1] = SDL_PIXELFORMAT_XRGB8888;
@@ -3896,7 +3908,7 @@ SDL_GetRenderDriverInfo(int idx, SDL2_RendererInfo *info)
info->texture_formats[4] = SDL_PIXELFORMAT_NV12;
info->texture_formats[5] = SDL_PIXELFORMAT_NV21;
} else if (SDL3_strcmp(name, "direct3d12") == 0) {
- info->flags = SDL2_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL2_RENDERER_TARGETTEXTURE;
+ info->flags = SDL2_RENDERER_ACCELERATED | SDL2_RENDERER_PRESENTVSYNC | SDL2_RENDERER_TARGETTEXTURE;
info->num_texture_formats = 6;
info->texture_formats[0] = SDL_PIXELFORMAT_ARGB8888;
info->texture_formats[1] = SDL_PIXELFORMAT_XRGB8888;
@@ -3907,7 +3919,7 @@ SDL_GetRenderDriverInfo(int idx, SDL2_RendererInfo *info)
info->max_texture_width = 16384;
info->max_texture_height = 16384;
} else if (SDL3_strcmp(name, "metal") == 0) {
- info->flags = SDL2_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL2_RENDERER_TARGETTEXTURE;
+ info->flags = SDL2_RENDERER_ACCELERATED | SDL2_RENDERER_PRESENTVSYNC | SDL2_RENDERER_TARGETTEXTURE;
info->num_texture_formats = 6;
info->texture_formats[0] = SDL_PIXELFORMAT_ARGB8888;
info->texture_formats[1] = SDL_PIXELFORMAT_ABGR8888;
@@ -3916,9 +3928,9 @@ SDL_GetRenderDriverInfo(int idx, SDL2_RendererInfo *info)
info->texture_formats[4] = SDL_PIXELFORMAT_NV12;
info->texture_formats[5] = SDL_PIXELFORMAT_NV21;
} else if (SDL3_strcmp(name, "software") == 0) {
- info->flags = SDL2_RENDERER_SOFTWARE | SDL_RENDERER_PRESENTVSYNC | SDL2_RENDERER_TARGETTEXTURE;
+ info->flags = SDL2_RENDERER_SOFTWARE | SDL2_RENDERER_PRESENTVSYNC | SDL2_RENDERER_TARGETTEXTURE;
} else { /* this seems reasonable if something currently-unknown shows up in SDL3. */
- info->flags = SDL2_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL2_RENDERER_TARGETTEXTURE;
+ info->flags = SDL2_RENDERER_ACCELERATED | SDL2_RENDERER_PRESENTVSYNC | SDL2_RENDERER_TARGETTEXTURE;
info->num_texture_formats = 1;
info->texture_formats[0] = SDL_PIXELFORMAT_ARGB8888;
}
@@ -3941,7 +3953,7 @@ DECLSPEC SDL_Renderer *SDLCALL
SDL_CreateRenderer(SDL_Window *window, int idx, Uint32 flags)
{
SDL_PropertiesID props;
- SDL_Renderer *renderer = NULL;
+ SDL_Renderer *renderer;
const char *name = NULL;
if (idx != -1) {
@@ -3966,12 +3978,14 @@ SDL_CreateRenderer(SDL_Window *window, int idx, Uint32 flags)
name = SDL_SOFTWARE_RENDERER;
}
- flags &= ~(SDL2_RENDERER_SOFTWARE | SDL2_RENDERER_ACCELERATED | SDL2_RENDERER_TARGETTEXTURE); /* clear flags removed in SDL3 */
- renderer = SDL3_CreateRenderer(window, name, flags);
+ renderer = SDL3_CreateRenderer(window, name);
props = SDL3_GetRendererProperties(renderer);
if (props) {
SDL3_SetBooleanProperty(props, PROP_RENDERER_BATCHING, SDL2Compat_GetHintBoolean("SDL_RENDER_BATCHING", SDL_FALSE));
}
+ if (flags & SDL2_RENDERER_PRESENTVSYNC) {
+ SDL3_SetRenderVSync(renderer, 1);
+ }
return renderer;
}
diff --git a/src/sdl3_syms.h b/src/sdl3_syms.h
index 48604b9..47be816 100644
--- a/src/sdl3_syms.h
+++ b/src/sdl3_syms.h
@@ -302,7 +302,7 @@ SDL3_SYM_RENAMED(SDL_bool,IntersectRectAndLine,GetRectAndLineIntersection,(const
SDL3_SYM_PASSTHROUGH(int,GetNumRenderDrivers,(void),(),return)
SDL3_SYM(const char *,GetRenderDriver,(int a),(a),return);
SDL3_SYM(int,CreateWindowAndRenderer,(const char *a, int b, int c, SDL_WindowFlags d, SDL_Window **e, SDL_Renderer **f),(a,b,c,d,e,f),return)
-SDL3_SYM(SDL_Renderer*,CreateRenderer,(SDL_Window *a, const char *b, SDL_RendererFlags c),(a,b,c),return)
+SDL3_SYM(SDL_Renderer*,CreateRenderer,(SDL_Window *a, const char *b),(a,b),return)
SDL3_SYM_PASSTHROUGH(SDL_Renderer*,CreateSoftwareRenderer,(SDL_Surface *a),(a),return)
SDL3_SYM_PASSTHROUGH(SDL_Renderer*,GetRenderer,(SDL_Window *a),(a),return)
SDL3_SYM(int,GetRendererInfo,(SDL_Renderer *a, SDL_RendererInfo *b),(a,b),return)