From 735f4e2bcb45d3ed72ac2bbbd62121eb350d3f4c Mon Sep 17 00:00:00 2001 From: TheEVolk Date: Thu, 22 May 2025 19:28:31 +0300 Subject: [PATCH] ref_api: make handle as argument and use type request input --- engine/platform/dos/vid_dos.c | 7 +--- engine/platform/linux/vid_fbdev.c | 7 +--- engine/platform/platform.h | 17 +------- engine/platform/sdl1/vid_sdl1.c | 7 +--- engine/platform/sdl2/vid_sdl2.c | 66 +++++++++++++++++++------------ engine/ref_api.h | 13 +++++- 6 files changed, 59 insertions(+), 58 deletions(-) diff --git a/engine/platform/dos/vid_dos.c b/engine/platform/dos/vid_dos.c index 9d1b5549..08bf206a 100644 --- a/engine/platform/dos/vid_dos.c +++ b/engine/platform/dos/vid_dos.c @@ -543,12 +543,9 @@ qboolean SW_CreateBuffer( int width, int height, uint *stride, uint *bpp, uint * return true; } -window_handle_t R_GetWindowHandle( void ) +qboolean R_GetWindowHandle( void **handle, int type ) { - window_handle_t handle; - handle.type = REF_WINDOW_TYPE_NONE; - handle.handle = NULL; - return handle; + return FALSE; } #endif diff --git a/engine/platform/linux/vid_fbdev.c b/engine/platform/linux/vid_fbdev.c index 6b0c371f..e9a788d5 100644 --- a/engine/platform/linux/vid_fbdev.c +++ b/engine/platform/linux/vid_fbdev.c @@ -246,12 +246,9 @@ qboolean SW_CreateBuffer( int width, int height, uint *stride, uint *bpp, uint * return true; } -window_handle_t R_GetWindowHandle( void ) +qboolean R_GetWindowHandle( void **handle, int type ) { - window_handle_t handle; - handle.type = REF_WINDOW_TYPE_NONE; - handle.handle = NULL; - return handle; + return FALSE; } #endif diff --git a/engine/platform/platform.h b/engine/platform/platform.h index 3ba8f8e7..3d58f414 100644 --- a/engine/platform/platform.h +++ b/engine/platform/platform.h @@ -312,21 +312,6 @@ typedef enum rserr_unknown } rserr_t; -enum -{ - REF_WINDOW_TYPE_NONE = 0, // NULL - REF_WINDOW_TYPE_WIN32 = 1, // HWND - REF_WINDOW_TYPE_X11 = 2, // Display* - REF_WINDOW_TYPE_WAYLAND = 3, // wl_display* - REF_WINDOW_TYPE_MACOS = 4, // NSWindow* -}; - -typedef struct window_handle_s -{ - int type; - void* handle; -} window_handle_t; - struct vidmode_s; typedef enum window_mode_e window_mode_t; // Window @@ -345,7 +330,7 @@ void *SW_LockBuffer( void ); void SW_UnlockBuffer( void ); qboolean SW_CreateBuffer( int width, int height, uint *stride, uint *bpp, uint *r, uint *g, uint *b ); void Platform_Minimize_f( void ); -window_handle_t R_GetWindowHandle( void ); +qboolean R_GetWindowHandle( void **handle, int type ); // // in_evdev.c diff --git a/engine/platform/sdl1/vid_sdl1.c b/engine/platform/sdl1/vid_sdl1.c index 40d88b97..682efa7f 100644 --- a/engine/platform/sdl1/vid_sdl1.c +++ b/engine/platform/sdl1/vid_sdl1.c @@ -513,12 +513,9 @@ qboolean VID_SetMode( void ) return true; } -window_handle_t R_GetWindowHandle( void ) +qboolean R_GetWindowHandle( void **handle, int type ) { - window_handle_t handle; - handle.type = REF_WINDOW_TYPE_NONE; - handle.handle = NULL; - return handle; + return FALSE; } /* diff --git a/engine/platform/sdl2/vid_sdl2.c b/engine/platform/sdl2/vid_sdl2.c index 9a6a346b..b786d912 100644 --- a/engine/platform/sdl2/vid_sdl2.c +++ b/engine/platform/sdl2/vid_sdl2.c @@ -1165,36 +1165,52 @@ qboolean VID_SetMode( void ) return true; } -window_handle_t R_GetWindowHandle( void ) +qboolean R_GetWindowHandle( void **handle, int type ) { - window_handle_t handle; - handle.type = REF_WINDOW_TYPE_NONE; - handle.handle = NULL; - SDL_SysWMinfo wmInfo; - SDL_VERSION(&wmInfo.version); + SDL_VERSION( &wmInfo.version ); - if (SDL_GetWindowWMInfo(host.hWnd, &wmInfo) != SDL_TRUE) { - return handle; - } + if ( SDL_GetWindowWMInfo( host.hWnd, &wmInfo ) != SDL_TRUE ) + { + return FALSE; + } - #if defined(SDL_VIDEO_DRIVER_WINDOWS) - handle.type = REF_WINDOW_TYPE_WIN32; - handle.handle = (void*)wmInfo.info.win.window; // HWND - #elif defined(SDL_VIDEO_DRIVER_COCOA) - handle.type = REF_WINDOW_TYPE_MACOS; - handle.handle = (void*)wmInfo.info.cocoa.window; // NSWindow* - #elif defined(SDL_VIDEO_DRIVER_X11) - handle.type = REF_WINDOW_TYPE_X11; - handle.handle = (void*)(uintptr_t)wmInfo.info.x11.window; // X11 Window - #elif defined(SDL_VIDEO_DRIVER_WAYLAND) - handle.type = REF_WINDOW_TYPE_WAYLAND; - handle.handle = (void*)wmInfo.info.wl.surface; // wl_surface* - #else - return handle; - #endif + switch( type ) + { + case REF_WINDOW_TYPE_WIN32: +#ifdef SDL_VIDEO_DRIVER_WINDOWS + *handle = (void*)wmInfo.info.win.window; // HWND + return TRUE; +#else + return FALSE; +#endif + case REF_WINDOW_TYPE_MACOS: +#ifdef SDL_VIDEO_DRIVER_COCOA + *handle = (void*)wmInfo.info.cocoa.window; // NSWindow* + return TRUE; +#else + return FALSE; +#endif + case REF_WINDOW_TYPE_X11: +#ifdef SDL_VIDEO_DRIVER_X11 + *handle = (void*)(uintptr_t)wmInfo.info.x11.window; // X11 Window + return TRUE; +#else + return FALSE; +#endif + case REF_WINDOW_TYPE_WAYLAND: +#ifdef SDL_VIDEO_DRIVER_WAYLAND + *handle = (void*)wmInfo.info.wl.surface; // wl_surface* + return TRUE; +#else + return FALSE; +#endif + case REF_WINDOW_TYPE_SDL: + *handle = (void*)host.hWnd; // SDL_Window* + return TRUE; + } - return handle; + return FALSE; } /* diff --git a/engine/ref_api.h b/engine/ref_api.h index 2dd1f58c..dc9ad5fb 100644 --- a/engine/ref_api.h +++ b/engine/ref_api.h @@ -58,7 +58,7 @@ GNU General Public License for more details. // Removed R_DrawTileClear and Mod_LoadMapSprite, as they're implemented on engine side // Removed FillRGBABlend. Now FillRGBA accepts rendermode parameter. // 10. Added R_GetWindowHandle. -#define REF_API_VERSION 10 +#define REF_API_VERSION 9 #define TF_SKY (TF_SKYSIDE|TF_NOMIPMAP|TF_ALLOW_NEAREST) #define TF_FONT (TF_NOMIPMAP|TF_CLAMP|TF_ALLOW_NEAREST) @@ -104,6 +104,15 @@ typedef enum DEMO_QUAKE1 } demo_mode; +enum +{ + REF_WINDOW_TYPE_WIN32 = 1, // HWND + REF_WINDOW_TYPE_X11 = 2, // Display* + REF_WINDOW_TYPE_WAYLAND = 3, // wl_display* + REF_WINDOW_TYPE_MACOS = 4, // NSWindow* + REF_WINDOW_TYPE_SDL = 5, // SDL_Window* +}; + typedef struct { msurface_t *surf; @@ -470,7 +479,7 @@ typedef struct ref_api_s fs_api_t *fsapi; // for abstracting the engine's rendering - struct window_handle_t (*R_GetWindowHandle)( void ); + qboolean (*R_GetWindowHandle)( void **handle, int type ); } ref_api_t; struct mip_s;