ref_api: make handle as argument and use type request input

This commit is contained in:
TheEVolk
2025-05-22 19:28:31 +03:00
committed by Alibek Omarov
parent 9ebeb520fa
commit 735f4e2bcb
6 changed files with 59 additions and 58 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}
/*

View File

@@ -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;
}
/*

View File

@@ -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;