mirror of
https://github.com/libretro/RetroArch
synced 2025-03-25 16:44:01 +00:00
Create context get_api function
This commit is contained in:
parent
ba0e6bcdea
commit
16c1bd7a03
@ -366,11 +366,18 @@ static void android_gfx_ctx_input_driver(void *data,
|
|||||||
*input_data = androidinput;
|
*input_data = androidinput;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api android_gfx_ctx_get_api(void *data)
|
||||||
|
{
|
||||||
|
return android_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool android_gfx_ctx_bind_api(void *data,
|
static bool android_gfx_ctx_bind_api(void *data,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
unsigned version;
|
unsigned version;
|
||||||
|
|
||||||
|
android_api = api;
|
||||||
|
|
||||||
switch (api)
|
switch (api)
|
||||||
{
|
{
|
||||||
case GFX_CTX_OPENGL_API:
|
case GFX_CTX_OPENGL_API:
|
||||||
@ -385,15 +392,11 @@ static bool android_gfx_ctx_bind_api(void *data,
|
|||||||
g_es3 = true;
|
g_es3 = true;
|
||||||
|
|
||||||
if (api == GFX_CTX_OPENGL_ES_API)
|
if (api == GFX_CTX_OPENGL_ES_API)
|
||||||
{
|
|
||||||
android_api = api;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case GFX_CTX_VULKAN_API:
|
case GFX_CTX_VULKAN_API:
|
||||||
#ifdef HAVE_VULKAN
|
#ifdef HAVE_VULKAN
|
||||||
android_api = api;
|
|
||||||
return true;
|
return true;
|
||||||
#else
|
#else
|
||||||
break;
|
break;
|
||||||
@ -594,6 +597,7 @@ static void android_gfx_ctx_set_flags(void *data, uint32_t flags)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_android = {
|
const gfx_ctx_driver_t gfx_ctx_android = {
|
||||||
android_gfx_ctx_init,
|
android_gfx_ctx_init,
|
||||||
android_gfx_ctx_destroy,
|
android_gfx_ctx_destroy,
|
||||||
|
android_gfx_ctx_get_api,
|
||||||
android_gfx_ctx_bind_api,
|
android_gfx_ctx_bind_api,
|
||||||
android_gfx_ctx_set_swap_interval,
|
android_gfx_ctx_set_swap_interval,
|
||||||
android_gfx_ctx_set_video_mode,
|
android_gfx_ctx_set_video_mode,
|
||||||
|
@ -54,6 +54,8 @@ extern CGLError CGLSetSurface(CGLContextObj gl, CGSConnectionID cid, CGSWindowID
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static enum gfx_ctx_api cgl_api = GFX_CTX_NONE;
|
||||||
|
|
||||||
typedef struct gfx_ctx_cgl_data
|
typedef struct gfx_ctx_cgl_data
|
||||||
{
|
{
|
||||||
CGLContextObj glCtx;
|
CGLContextObj glCtx;
|
||||||
@ -171,6 +173,11 @@ static bool gfx_ctx_cgl_suppress_screensaver(void *data, bool enable)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_cgl_get_api(void *data)
|
||||||
|
{
|
||||||
|
return cgl_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_cgl_bind_api(void *data, enum gfx_ctx_api api,
|
static bool gfx_ctx_cgl_bind_api(void *data, enum gfx_ctx_api api,
|
||||||
unsigned major, unsigned minor)
|
unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
@ -179,7 +186,13 @@ static bool gfx_ctx_cgl_bind_api(void *data, enum gfx_ctx_api api,
|
|||||||
(void)major;
|
(void)major;
|
||||||
(void)minor;
|
(void)minor;
|
||||||
|
|
||||||
return api == GFX_CTX_OPENGL_API;
|
if (api == GFX_CTX_OPENGL_API)
|
||||||
|
{
|
||||||
|
cgl_api = api;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gfx_ctx_cgl_show_mouse(void *data, bool state)
|
static void gfx_ctx_cgl_show_mouse(void *data, bool state)
|
||||||
@ -325,6 +338,7 @@ static void gfx_ctx_cgl_set_flags(void *data, uint32_t flags)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_cgl = {
|
const gfx_ctx_driver_t gfx_ctx_cgl = {
|
||||||
gfx_ctx_cgl_init,
|
gfx_ctx_cgl_init,
|
||||||
gfx_ctx_cgl_destroy,
|
gfx_ctx_cgl_destroy,
|
||||||
|
gfx_ctx_cgl_get_api,
|
||||||
gfx_ctx_cgl_bind_api,
|
gfx_ctx_cgl_bind_api,
|
||||||
gfx_ctx_cgl_swap_interval,
|
gfx_ctx_cgl_swap_interval,
|
||||||
gfx_ctx_cgl_set_video_mode,
|
gfx_ctx_cgl_set_video_mode,
|
||||||
|
@ -85,6 +85,8 @@
|
|||||||
#define RAScreen NSScreen
|
#define RAScreen NSScreen
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static enum gfx_ctx_api cocoagl_api = GFX_CTX_NONE;
|
||||||
|
|
||||||
typedef struct cocoa_ctx_data
|
typedef struct cocoa_ctx_data
|
||||||
{
|
{
|
||||||
bool core_hw_context_enable;
|
bool core_hw_context_enable;
|
||||||
@ -275,6 +277,11 @@ static void cocoagl_gfx_ctx_destroy(void *data)
|
|||||||
free(cocoa_ctx);
|
free(cocoa_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api cocoagl_gfx_ctx_get_api(void *data)
|
||||||
|
{
|
||||||
|
return cocoagl_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool cocoagl_gfx_ctx_bind_api(void *data, enum gfx_ctx_api api, unsigned major, unsigned minor)
|
static bool cocoagl_gfx_ctx_bind_api(void *data, enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
(void)data;
|
(void)data;
|
||||||
@ -286,8 +293,9 @@ static bool cocoagl_gfx_ctx_bind_api(void *data, enum gfx_ctx_api api, unsigned
|
|||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
g_minor = minor;
|
cocoagl_api = api;
|
||||||
g_major = major;
|
g_minor = minor;
|
||||||
|
g_major = major;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -653,6 +661,7 @@ static void cocoagl_gfx_ctx_set_flags(void *data, uint32_t flags)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_cocoagl = {
|
const gfx_ctx_driver_t gfx_ctx_cocoagl = {
|
||||||
cocoagl_gfx_ctx_init,
|
cocoagl_gfx_ctx_init,
|
||||||
cocoagl_gfx_ctx_destroy,
|
cocoagl_gfx_ctx_destroy,
|
||||||
|
cocoagl_gfx_ctx_get_api,
|
||||||
cocoagl_gfx_ctx_bind_api,
|
cocoagl_gfx_ctx_bind_api,
|
||||||
cocoagl_gfx_ctx_swap_interval,
|
cocoagl_gfx_ctx_swap_interval,
|
||||||
cocoagl_gfx_ctx_set_video_mode,
|
cocoagl_gfx_ctx_set_video_mode,
|
||||||
|
@ -58,8 +58,15 @@
|
|||||||
static bool widescreen_mode = false;
|
static bool widescreen_mode = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef struct gfx_ctx_d3d_data
|
||||||
|
{
|
||||||
|
void *empty;
|
||||||
|
} gfx_ctx_d3d_data_t;
|
||||||
|
|
||||||
void *dinput;
|
void *dinput;
|
||||||
|
|
||||||
|
static enum gfx_ctx_api d3d_api = GFX_CTX_NONE;
|
||||||
|
|
||||||
static bool gfx_ctx_d3d_set_resize(void *data,
|
static bool gfx_ctx_d3d_set_resize(void *data,
|
||||||
unsigned new_width, unsigned new_height)
|
unsigned new_width, unsigned new_height)
|
||||||
{
|
{
|
||||||
@ -172,6 +179,11 @@ static bool gfx_ctx_d3d_has_windowed(void *data)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_d3d_get_api(void *data)
|
||||||
|
{
|
||||||
|
return d3d_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_d3d_bind_api(void *data,
|
static bool gfx_ctx_d3d_bind_api(void *data,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
@ -179,6 +191,8 @@ static bool gfx_ctx_d3d_bind_api(void *data,
|
|||||||
(void)major;
|
(void)major;
|
||||||
(void)minor;
|
(void)minor;
|
||||||
|
|
||||||
|
d3d_api = api;
|
||||||
|
|
||||||
switch (api)
|
switch (api)
|
||||||
{
|
{
|
||||||
case GFX_CTX_DIRECT3D8_API:
|
case GFX_CTX_DIRECT3D8_API:
|
||||||
@ -198,16 +212,24 @@ static bool gfx_ctx_d3d_bind_api(void *data,
|
|||||||
|
|
||||||
static void *gfx_ctx_d3d_init(video_frame_info_t *video_info, void *video_driver)
|
static void *gfx_ctx_d3d_init(video_frame_info_t *video_info, void *video_driver)
|
||||||
{
|
{
|
||||||
|
gfx_ctx_d3d_data_t *d3d = (gfx_ctx_d3d_data_t*)calloc(1, sizeof(*d3d));
|
||||||
|
|
||||||
|
if (!d3d)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
#ifndef _XBOX
|
#ifndef _XBOX
|
||||||
win32_monitor_init();
|
win32_monitor_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return video_driver;
|
return d3d;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gfx_ctx_d3d_destroy(void *data)
|
static void gfx_ctx_d3d_destroy(void *data)
|
||||||
{
|
{
|
||||||
(void)data;
|
gfx_ctx_d3d_data_t *d3d = (gfx_ctx_d3d_data_t*)data;
|
||||||
|
|
||||||
|
if (d3d)
|
||||||
|
free(d3d);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gfx_ctx_d3d_input_driver(void *data,
|
static void gfx_ctx_d3d_input_driver(void *data,
|
||||||
@ -388,6 +410,7 @@ static void gfx_ctx_d3d_set_flags(void *data, uint32_t flags)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_d3d = {
|
const gfx_ctx_driver_t gfx_ctx_d3d = {
|
||||||
gfx_ctx_d3d_init,
|
gfx_ctx_d3d_init,
|
||||||
gfx_ctx_d3d_destroy,
|
gfx_ctx_d3d_destroy,
|
||||||
|
gfx_ctx_d3d_get_api,
|
||||||
gfx_ctx_d3d_bind_api,
|
gfx_ctx_d3d_bind_api,
|
||||||
gfx_ctx_d3d_swap_interval,
|
gfx_ctx_d3d_swap_interval,
|
||||||
gfx_ctx_d3d_set_video_mode,
|
gfx_ctx_d3d_set_video_mode,
|
||||||
|
@ -789,16 +789,21 @@ static bool gfx_ctx_drm_suppress_screensaver(void *data, bool enable)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_drm_get_api(void *data)
|
||||||
|
{
|
||||||
|
return drm_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_drm_bind_api(void *video_driver,
|
static bool gfx_ctx_drm_bind_api(void *video_driver,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
(void)video_driver;
|
(void)video_driver;
|
||||||
|
|
||||||
|
drm_api = api;
|
||||||
#ifdef HAVE_EGL
|
#ifdef HAVE_EGL
|
||||||
g_egl_major = major;
|
g_egl_major = major;
|
||||||
g_egl_minor = minor;
|
g_egl_minor = minor;
|
||||||
#endif
|
#endif
|
||||||
drm_api = api;
|
|
||||||
|
|
||||||
switch (api)
|
switch (api)
|
||||||
{
|
{
|
||||||
|
@ -47,6 +47,7 @@ typedef struct
|
|||||||
|
|
||||||
static int emscripten_initial_width;
|
static int emscripten_initial_width;
|
||||||
static int emscripten_initial_height;
|
static int emscripten_initial_height;
|
||||||
|
static enum gfx_ctx_api emscripten_api = GFX_CTX_NONE;
|
||||||
|
|
||||||
static void gfx_ctx_emscripten_swap_interval(void *data, unsigned interval)
|
static void gfx_ctx_emscripten_swap_interval(void *data, unsigned interval)
|
||||||
{
|
{
|
||||||
@ -254,6 +255,11 @@ static bool gfx_ctx_emscripten_set_video_mode(void *data,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_emscripten_get_api(void *data)
|
||||||
|
{
|
||||||
|
return emscripten_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_emscripten_bind_api(void *data,
|
static bool gfx_ctx_emscripten_bind_api(void *data,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
@ -261,6 +267,8 @@ static bool gfx_ctx_emscripten_bind_api(void *data,
|
|||||||
(void)major;
|
(void)major;
|
||||||
(void)minor;
|
(void)minor;
|
||||||
|
|
||||||
|
emscripten_api = api;
|
||||||
|
|
||||||
switch (api)
|
switch (api)
|
||||||
{
|
{
|
||||||
case GFX_CTX_OPENGL_ES_API:
|
case GFX_CTX_OPENGL_ES_API:
|
||||||
@ -363,6 +371,7 @@ static void gfx_ctx_emscripten_set_flags(void *data, uint32_t flags)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_emscripten = {
|
const gfx_ctx_driver_t gfx_ctx_emscripten = {
|
||||||
gfx_ctx_emscripten_init,
|
gfx_ctx_emscripten_init,
|
||||||
gfx_ctx_emscripten_destroy,
|
gfx_ctx_emscripten_destroy,
|
||||||
|
gfx_ctx_emscripten_get_api,
|
||||||
gfx_ctx_emscripten_bind_api,
|
gfx_ctx_emscripten_bind_api,
|
||||||
gfx_ctx_emscripten_swap_interval,
|
gfx_ctx_emscripten_swap_interval,
|
||||||
gfx_ctx_emscripten_set_video_mode,
|
gfx_ctx_emscripten_set_video_mode,
|
||||||
|
@ -48,6 +48,11 @@ static unsigned win32_gdi_minor = 0;
|
|||||||
static unsigned win32_gdi_interval = 0;
|
static unsigned win32_gdi_interval = 0;
|
||||||
static enum gfx_ctx_api win32_gdi_api = GFX_CTX_NONE;
|
static enum gfx_ctx_api win32_gdi_api = GFX_CTX_NONE;
|
||||||
|
|
||||||
|
typedef struct gfx_ctx_gdi_data
|
||||||
|
{
|
||||||
|
void *empty;
|
||||||
|
} gfx_ctx_gdi_data_t;
|
||||||
|
|
||||||
void *dinput_gdi;
|
void *dinput_gdi;
|
||||||
|
|
||||||
static void setup_gdi_pixel_format(HDC hdc)
|
static void setup_gdi_pixel_format(HDC hdc)
|
||||||
@ -130,19 +135,21 @@ static void gfx_ctx_gdi_get_video_size(void *data,
|
|||||||
static void *gfx_ctx_gdi_init(
|
static void *gfx_ctx_gdi_init(
|
||||||
video_frame_info_t *video_info, void *video_driver)
|
video_frame_info_t *video_info, void *video_driver)
|
||||||
{
|
{
|
||||||
WNDCLASSEX wndclass = {0};
|
WNDCLASSEX wndclass = {0};
|
||||||
|
gfx_ctx_gdi_data_t *gdi = (gfx_ctx_gdi_data_t*)calloc(1, sizeof(*gdi));
|
||||||
|
|
||||||
(void)video_driver;
|
if (!gdi)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
if (g_inited)
|
if (g_inited)
|
||||||
return NULL;
|
goto error;
|
||||||
|
|
||||||
win32_window_reset();
|
win32_window_reset();
|
||||||
win32_monitor_init();
|
win32_monitor_init();
|
||||||
|
|
||||||
wndclass.lpfnWndProc = WndProcGDI;
|
wndclass.lpfnWndProc = WndProcGDI;
|
||||||
if (!win32_window_init(&wndclass, true, NULL))
|
if (!win32_window_init(&wndclass, true, NULL))
|
||||||
return NULL;
|
goto error;
|
||||||
|
|
||||||
switch (win32_gdi_api)
|
switch (win32_gdi_api)
|
||||||
{
|
{
|
||||||
@ -151,14 +158,18 @@ static void *gfx_ctx_gdi_init(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (void*)"gdi";
|
return gdi;
|
||||||
|
|
||||||
|
error:
|
||||||
|
if (gdi)
|
||||||
|
free(gdi);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gfx_ctx_gdi_destroy(void *data)
|
static void gfx_ctx_gdi_destroy(void *data)
|
||||||
{
|
{
|
||||||
HWND window = win32_get_window();
|
gfx_ctx_gdi_data_t *gdi = (gfx_ctx_gdi_data_t*)data;
|
||||||
|
HWND window = win32_get_window();
|
||||||
(void)data;
|
|
||||||
|
|
||||||
switch (win32_gdi_api)
|
switch (win32_gdi_api)
|
||||||
{
|
{
|
||||||
@ -185,6 +196,9 @@ static void gfx_ctx_gdi_destroy(void *data)
|
|||||||
g_restore_desktop = false;
|
g_restore_desktop = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gdi)
|
||||||
|
free(gdi);
|
||||||
|
|
||||||
g_inited = false;
|
g_inited = false;
|
||||||
win32_gdi_major = 0;
|
win32_gdi_major = 0;
|
||||||
win32_gdi_minor = 0;
|
win32_gdi_minor = 0;
|
||||||
@ -271,6 +285,11 @@ static bool gfx_ctx_gdi_get_metrics(void *data,
|
|||||||
return win32_get_metrics(data, type, value);
|
return win32_get_metrics(data, type, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_gdi_get_api(void *data)
|
||||||
|
{
|
||||||
|
return win32_gdi_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_gdi_bind_api(void *data,
|
static bool gfx_ctx_gdi_bind_api(void *data,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
@ -328,6 +347,7 @@ void create_gdi_context(HWND hwnd, bool *quit)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_gdi = {
|
const gfx_ctx_driver_t gfx_ctx_gdi = {
|
||||||
gfx_ctx_gdi_init,
|
gfx_ctx_gdi_init,
|
||||||
gfx_ctx_gdi_destroy,
|
gfx_ctx_gdi_destroy,
|
||||||
|
gfx_ctx_gdi_get_api,
|
||||||
gfx_ctx_gdi_bind_api,
|
gfx_ctx_gdi_bind_api,
|
||||||
gfx_ctx_gdi_swap_interval,
|
gfx_ctx_gdi_swap_interval,
|
||||||
gfx_ctx_gdi_set_video_mode,
|
gfx_ctx_gdi_set_video_mode,
|
||||||
|
@ -86,6 +86,11 @@ static bool gfx_ctx_null_suppress_screensaver(void *data, bool enable)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_null_get_api(void *data)
|
||||||
|
{
|
||||||
|
return GFX_CTX_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_null_bind_api(void *data, enum gfx_ctx_api api, unsigned major, unsigned minor)
|
static bool gfx_ctx_null_bind_api(void *data, enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
(void)data;
|
(void)data;
|
||||||
@ -131,6 +136,7 @@ static void gfx_ctx_null_set_flags(void *data, uint32_t flags)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_null = {
|
const gfx_ctx_driver_t gfx_ctx_null = {
|
||||||
gfx_ctx_null_init,
|
gfx_ctx_null_init,
|
||||||
gfx_ctx_null_destroy,
|
gfx_ctx_null_destroy,
|
||||||
|
gfx_ctx_null_get_api,
|
||||||
gfx_ctx_null_bind_api,
|
gfx_ctx_null_bind_api,
|
||||||
gfx_ctx_null_swap_interval,
|
gfx_ctx_null_swap_interval,
|
||||||
gfx_ctx_null_set_video_mode,
|
gfx_ctx_null_set_video_mode,
|
||||||
|
@ -28,6 +28,8 @@ typedef struct
|
|||||||
unsigned height;
|
unsigned height;
|
||||||
} khr_display_ctx_data_t;
|
} khr_display_ctx_data_t;
|
||||||
|
|
||||||
|
static enum gfx_ctx_api khr_api = GFX_CTX_NONE;
|
||||||
|
|
||||||
static void gfx_ctx_khr_display_destroy(void *data)
|
static void gfx_ctx_khr_display_destroy(void *data)
|
||||||
{
|
{
|
||||||
khr_display_ctx_data_t *khr = (khr_display_ctx_data_t*)data;
|
khr_display_ctx_data_t *khr = (khr_display_ctx_data_t*)data;
|
||||||
@ -152,13 +154,24 @@ static void gfx_ctx_khr_display_input_driver(void *data,
|
|||||||
*input_data = NULL;
|
*input_data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_khr_display_get_api(void *data)
|
||||||
|
{
|
||||||
|
return khr_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_khr_display_bind_api(void *data,
|
static bool gfx_ctx_khr_display_bind_api(void *data,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
(void)data;
|
(void)data;
|
||||||
(void)major;
|
(void)major;
|
||||||
(void)minor;
|
(void)minor;
|
||||||
return api == GFX_CTX_VULKAN_API;
|
|
||||||
|
khr_api = api;
|
||||||
|
|
||||||
|
if (api == GFX_CTX_VULKAN_API)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_khr_display_has_focus(void *data)
|
static bool gfx_ctx_khr_display_has_focus(void *data)
|
||||||
@ -218,6 +231,7 @@ static void *gfx_ctx_khr_display_get_context_data(void *data)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_khr_display = {
|
const gfx_ctx_driver_t gfx_ctx_khr_display = {
|
||||||
gfx_ctx_khr_display_init,
|
gfx_ctx_khr_display_init,
|
||||||
gfx_ctx_khr_display_destroy,
|
gfx_ctx_khr_display_destroy,
|
||||||
|
gfx_ctx_khr_display_get_api,
|
||||||
gfx_ctx_khr_display_bind_api,
|
gfx_ctx_khr_display_bind_api,
|
||||||
gfx_ctx_khr_display_set_swap_interval,
|
gfx_ctx_khr_display_set_swap_interval,
|
||||||
gfx_ctx_khr_display_set_video_mode,
|
gfx_ctx_khr_display_set_video_mode,
|
||||||
|
@ -209,12 +209,21 @@ static void gfx_ctx_mali_fbdev_input_driver(void *data,
|
|||||||
*input_data = NULL;
|
*input_data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_mali_fbdev_get_api(void *data)
|
||||||
|
{
|
||||||
|
return mali_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_mali_fbdev_bind_api(void *data,
|
static bool gfx_ctx_mali_fbdev_bind_api(void *data,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
(void)data;
|
(void)data;
|
||||||
mali_api = api;
|
mali_api = api;
|
||||||
return api == GFX_CTX_OPENGL_ES_API;
|
|
||||||
|
if (api == GFX_CTX_OPENGL_ES_API)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_mali_fbdev_has_focus(void *data)
|
static bool gfx_ctx_mali_fbdev_has_focus(void *data)
|
||||||
@ -280,6 +289,7 @@ static void gfx_ctx_mali_fbdev_set_flags(void *data, uint32_t flags)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_mali_fbdev = {
|
const gfx_ctx_driver_t gfx_ctx_mali_fbdev = {
|
||||||
gfx_ctx_mali_fbdev_init,
|
gfx_ctx_mali_fbdev_init,
|
||||||
gfx_ctx_mali_fbdev_destroy,
|
gfx_ctx_mali_fbdev_destroy,
|
||||||
|
gfx_ctx_mali_fbdev_get_api,
|
||||||
gfx_ctx_mali_fbdev_bind_api,
|
gfx_ctx_mali_fbdev_bind_api,
|
||||||
gfx_ctx_mali_fbdev_set_swap_interval,
|
gfx_ctx_mali_fbdev_set_swap_interval,
|
||||||
gfx_ctx_mali_fbdev_set_video_mode,
|
gfx_ctx_mali_fbdev_set_video_mode,
|
||||||
|
@ -40,6 +40,8 @@ typedef struct
|
|||||||
unsigned width, height;
|
unsigned width, height;
|
||||||
} opendingux_ctx_data_t;
|
} opendingux_ctx_data_t;
|
||||||
|
|
||||||
|
static enum gfx_ctx_api opendingux_api = GFX_CTX_NONE;
|
||||||
|
|
||||||
static void gfx_ctx_opendingux_destroy(void *data)
|
static void gfx_ctx_opendingux_destroy(void *data)
|
||||||
{
|
{
|
||||||
opendingux_ctx_data_t *viv = (opendingux_ctx_data_t*)data;
|
opendingux_ctx_data_t *viv = (opendingux_ctx_data_t*)data;
|
||||||
@ -183,11 +185,21 @@ static void gfx_ctx_opendingux_input_driver(void *data,
|
|||||||
*input_data = NULL;
|
*input_data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_opendingux_get_api(void *data)
|
||||||
|
{
|
||||||
|
return opendingux_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_opendingux_bind_api(void *data,
|
static bool gfx_ctx_opendingux_bind_api(void *data,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
(void)data;
|
(void)data;
|
||||||
return api == GFX_CTX_OPENGL_ES_API;
|
|
||||||
|
opendingux_api = api;
|
||||||
|
|
||||||
|
if (api == GFX_CTX_OPENGL_ES_API)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_opendingux_has_focus(void *data)
|
static bool gfx_ctx_opendingux_has_focus(void *data)
|
||||||
@ -254,6 +266,7 @@ static void gfx_ctx_opendingux_set_flags(void *data, uint32_t flags)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_opendingux_fbdev = {
|
const gfx_ctx_driver_t gfx_ctx_opendingux_fbdev = {
|
||||||
gfx_ctx_opendingux_init,
|
gfx_ctx_opendingux_init,
|
||||||
gfx_ctx_opendingux_destroy,
|
gfx_ctx_opendingux_destroy,
|
||||||
|
gfx_ctx_opendingux_get_api,
|
||||||
gfx_ctx_opendingux_bind_api,
|
gfx_ctx_opendingux_bind_api,
|
||||||
gfx_ctx_opendingux_set_swap_interval,
|
gfx_ctx_opendingux_set_swap_interval,
|
||||||
gfx_ctx_opendingux_set_video_mode,
|
gfx_ctx_opendingux_set_video_mode,
|
||||||
|
@ -48,6 +48,8 @@ static int g_osmesa_format = OSMESA_RGBA;
|
|||||||
static int g_osmesa_bpp = 4;
|
static int g_osmesa_bpp = 4;
|
||||||
static const char *g_osmesa_fifo = "/tmp/osmesa-retroarch.sock";
|
static const char *g_osmesa_fifo = "/tmp/osmesa-retroarch.sock";
|
||||||
|
|
||||||
|
static enum gfx_ctx_api osmesa_api = GFX_CTX_NONE;
|
||||||
|
|
||||||
typedef struct gfx_osmesa_ctx_data
|
typedef struct gfx_osmesa_ctx_data
|
||||||
{
|
{
|
||||||
uint8_t *screen;
|
uint8_t *screen;
|
||||||
@ -209,12 +211,19 @@ static void osmesa_ctx_destroy(void *data)
|
|||||||
free(osmesa);
|
free(osmesa);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool osmesa_ctx_bind_api(void *data, enum gfx_ctx_api api, unsigned major,
|
static enum gfx_ctx_api osmesa_ctx_get_api(void *data)
|
||||||
unsigned minor)
|
{
|
||||||
|
return osmesa_api;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool osmesa_ctx_bind_api(void *data,
|
||||||
|
enum gfx_ctx_api api, unsigned major,
|
||||||
|
unsigned minor)
|
||||||
{
|
{
|
||||||
if (api != GFX_CTX_OPENGL_API)
|
if (api != GFX_CTX_OPENGL_API)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
osmesa_api = api;
|
||||||
g_osmesa_profile = OSMESA_COMPAT_PROFILE;
|
g_osmesa_profile = OSMESA_COMPAT_PROFILE;
|
||||||
|
|
||||||
if (major)
|
if (major)
|
||||||
@ -384,6 +393,7 @@ const gfx_ctx_driver_t gfx_ctx_osmesa =
|
|||||||
{
|
{
|
||||||
osmesa_ctx_init,
|
osmesa_ctx_init,
|
||||||
osmesa_ctx_destroy,
|
osmesa_ctx_destroy,
|
||||||
|
osmesa_ctx_get_api,
|
||||||
osmesa_ctx_bind_api,
|
osmesa_ctx_bind_api,
|
||||||
osmesa_ctx_swap_interval,
|
osmesa_ctx_swap_interval,
|
||||||
osmesa_ctx_set_video_mode,
|
osmesa_ctx_set_video_mode,
|
||||||
|
@ -45,6 +45,8 @@ typedef struct gfx_ctx_ps3_data
|
|||||||
#endif
|
#endif
|
||||||
} gfx_ctx_ps3_data_t;
|
} gfx_ctx_ps3_data_t;
|
||||||
|
|
||||||
|
static enum gfx_ctx_api ps3_api = GFX_CTX_NONE;
|
||||||
|
|
||||||
static void gfx_ctx_ps3_get_resolution(unsigned idx,
|
static void gfx_ctx_ps3_get_resolution(unsigned idx,
|
||||||
unsigned *width, unsigned *height)
|
unsigned *width, unsigned *height)
|
||||||
{
|
{
|
||||||
@ -317,6 +319,11 @@ static void gfx_ctx_ps3_input_driver(void *data,
|
|||||||
*input_data = ps3input;
|
*input_data = ps3input;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_ps3_get_api(void *data)
|
||||||
|
{
|
||||||
|
return ps3_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_ps3_bind_api(void *data,
|
static bool gfx_ctx_ps3_bind_api(void *data,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
@ -324,7 +331,15 @@ static bool gfx_ctx_ps3_bind_api(void *data,
|
|||||||
(void)major;
|
(void)major;
|
||||||
(void)minor;
|
(void)minor;
|
||||||
|
|
||||||
return api == GFX_CTX_OPENGL_API || GFX_CTX_OPENGL_ES_API;
|
ps3_api = api;
|
||||||
|
|
||||||
|
if (
|
||||||
|
api == GFX_CTX_OPENGL_API ||
|
||||||
|
api == GFX_CTX_OPENGL_ES_API
|
||||||
|
)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gfx_ctx_ps3_get_video_output_size(void *data,
|
static void gfx_ctx_ps3_get_video_output_size(void *data,
|
||||||
@ -398,6 +413,7 @@ static void gfx_ctx_ps3_set_flags(void *data, uint32_t flags)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_ps3 = {
|
const gfx_ctx_driver_t gfx_ctx_ps3 = {
|
||||||
gfx_ctx_ps3_init,
|
gfx_ctx_ps3_init,
|
||||||
gfx_ctx_ps3_destroy,
|
gfx_ctx_ps3_destroy,
|
||||||
|
gfx_ctx_ps3_get_api,
|
||||||
gfx_ctx_ps3_bind_api,
|
gfx_ctx_ps3_bind_api,
|
||||||
gfx_ctx_ps3_set_swap_interval,
|
gfx_ctx_ps3_set_swap_interval,
|
||||||
gfx_ctx_ps3_set_video_mode,
|
gfx_ctx_ps3_set_video_mode,
|
||||||
|
@ -60,6 +60,8 @@ typedef struct
|
|||||||
bool resize;
|
bool resize;
|
||||||
} qnx_ctx_data_t;
|
} qnx_ctx_data_t;
|
||||||
|
|
||||||
|
static enum gfx_ctx_api qnx_api = GFX_CTX_NONE;
|
||||||
|
|
||||||
static void gfx_ctx_qnx_destroy(void *data)
|
static void gfx_ctx_qnx_destroy(void *data)
|
||||||
{
|
{
|
||||||
qnx_ctx_data_t *qnx = (qnx_ctx_data_t*)data;
|
qnx_ctx_data_t *qnx = (qnx_ctx_data_t*)data;
|
||||||
@ -330,11 +332,22 @@ static void gfx_ctx_qnx_input_driver(void *data,
|
|||||||
*input_data = qnxinput;
|
*input_data = qnxinput;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_qnx_get_api(void *data)
|
||||||
|
{
|
||||||
|
return qnx_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_qnx_bind_api(void *data,
|
static bool gfx_ctx_qnx_bind_api(void *data,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
(void)data;
|
(void)data;
|
||||||
return api == GFX_CTX_OPENGL_ES_API;
|
|
||||||
|
qnx_api = api;
|
||||||
|
|
||||||
|
if (api == GFX_CTX_OPENGL_ES_API)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_qnx_has_focus(void *data)
|
static bool gfx_ctx_qnx_has_focus(void *data)
|
||||||
@ -453,6 +466,7 @@ static void gfx_ctx_qnx_set_flags(void *data, uint32_t flags)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_qnx = {
|
const gfx_ctx_driver_t gfx_ctx_qnx = {
|
||||||
gfx_ctx_qnx_init,
|
gfx_ctx_qnx_init,
|
||||||
gfx_ctx_qnx_destroy,
|
gfx_ctx_qnx_destroy,
|
||||||
|
gfx_ctx_qnx_get_api,
|
||||||
gfx_ctx_qnx_bind_api,
|
gfx_ctx_qnx_bind_api,
|
||||||
gfx_ctx_qnx_set_swap_interval,
|
gfx_ctx_qnx_set_swap_interval,
|
||||||
gfx_ctx_qnx_set_video_mode,
|
gfx_ctx_qnx_set_video_mode,
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
#include "SDL.h"
|
#include "SDL.h"
|
||||||
|
|
||||||
static enum gfx_ctx_api sdl_api = GFX_CTX_OPENGL_API;
|
static enum gfx_ctx_api sdl_api = GFX_CTX_OPENGL_API;
|
||||||
static unsigned g_major = 2;
|
static unsigned g_major = 2;
|
||||||
static unsigned g_minor = 1;
|
static unsigned g_minor = 1;
|
||||||
|
|
||||||
typedef struct gfx_ctx_sdl_data
|
typedef struct gfx_ctx_sdl_data
|
||||||
@ -119,8 +119,14 @@ static void sdl_ctx_destroy(void *data)
|
|||||||
free(sdl);
|
free(sdl);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool sdl_ctx_bind_api(void *data, enum gfx_ctx_api api, unsigned major,
|
static enum gfx_ctx_api sdl_ctx_get_api(void *data)
|
||||||
unsigned minor)
|
{
|
||||||
|
return sdl_api;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool sdl_ctx_bind_api(void *data,
|
||||||
|
enum gfx_ctx_api api, unsigned major,
|
||||||
|
unsigned minor)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_SDL2
|
#ifdef HAVE_SDL2
|
||||||
unsigned profile;
|
unsigned profile;
|
||||||
@ -412,6 +418,7 @@ const gfx_ctx_driver_t gfx_ctx_sdl_gl =
|
|||||||
{
|
{
|
||||||
sdl_ctx_init,
|
sdl_ctx_init,
|
||||||
sdl_ctx_destroy,
|
sdl_ctx_destroy,
|
||||||
|
sdl_ctx_get_api,
|
||||||
sdl_ctx_bind_api,
|
sdl_ctx_bind_api,
|
||||||
sdl_ctx_swap_interval,
|
sdl_ctx_swap_interval,
|
||||||
sdl_ctx_set_video_mode,
|
sdl_ctx_set_video_mode,
|
||||||
|
@ -75,7 +75,7 @@ typedef struct
|
|||||||
VGImage vgimage[MAX_EGLIMAGE_TEXTURES];
|
VGImage vgimage[MAX_EGLIMAGE_TEXTURES];
|
||||||
} vc_ctx_data_t;
|
} vc_ctx_data_t;
|
||||||
|
|
||||||
static enum gfx_ctx_api vc_api;
|
static enum gfx_ctx_api vc_api = GFX_CTX_NONE;
|
||||||
static PFNEGLCREATEIMAGEKHRPROC peglCreateImageKHR;
|
static PFNEGLCREATEIMAGEKHRPROC peglCreateImageKHR;
|
||||||
static PFNEGLDESTROYIMAGEKHRPROC peglDestroyImageKHR;
|
static PFNEGLDESTROYIMAGEKHRPROC peglDestroyImageKHR;
|
||||||
|
|
||||||
@ -359,6 +359,11 @@ static bool gfx_ctx_vc_set_video_mode(void *data,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stati bool gfx_ctx_api gfx_ctx_vc_get_api(void *data)
|
||||||
|
{
|
||||||
|
return vc_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_vc_bind_api(void *data,
|
static bool gfx_ctx_vc_bind_api(void *data,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
@ -701,6 +706,7 @@ static void gfx_ctx_vc_set_flags(void *data, uint32_t flags)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_videocore = {
|
const gfx_ctx_driver_t gfx_ctx_videocore = {
|
||||||
gfx_ctx_vc_init,
|
gfx_ctx_vc_init,
|
||||||
gfx_ctx_vc_destroy,
|
gfx_ctx_vc_destroy,
|
||||||
|
gfx_ctx_vc_get_api,
|
||||||
gfx_ctx_vc_bind_api,
|
gfx_ctx_vc_bind_api,
|
||||||
gfx_ctx_vc_set_swap_interval,
|
gfx_ctx_vc_set_swap_interval,
|
||||||
gfx_ctx_vc_set_video_mode,
|
gfx_ctx_vc_set_video_mode,
|
||||||
@ -728,5 +734,4 @@ const gfx_ctx_driver_t gfx_ctx_videocore = {
|
|||||||
gfx_ctx_vc_bind_hw_render,
|
gfx_ctx_vc_bind_hw_render,
|
||||||
NULL,
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -42,6 +42,8 @@ typedef struct
|
|||||||
unsigned width, height;
|
unsigned width, height;
|
||||||
} vivante_ctx_data_t;
|
} vivante_ctx_data_t;
|
||||||
|
|
||||||
|
static enum gfx_ctx_api viv_api = GFX_CTX_NONE;
|
||||||
|
|
||||||
static void gfx_ctx_vivante_destroy(void *data)
|
static void gfx_ctx_vivante_destroy(void *data)
|
||||||
{
|
{
|
||||||
vivante_ctx_data_t *viv = (vivante_ctx_data_t*)data;
|
vivante_ctx_data_t *viv = (vivante_ctx_data_t*)data;
|
||||||
@ -190,11 +192,20 @@ static void gfx_ctx_vivante_input_driver(void *data,
|
|||||||
*input_data = NULL;
|
*input_data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_vivante_get_api(void *data)
|
||||||
|
{
|
||||||
|
return viv_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_vivante_bind_api(void *data,
|
static bool gfx_ctx_vivante_bind_api(void *data,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
(void)data;
|
|
||||||
return api == GFX_CTX_OPENGL_ES_API;
|
viv_api = api;
|
||||||
|
|
||||||
|
if (api == GFX_CTX_OPENGL_ES_API)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_vivante_has_focus(void *data)
|
static bool gfx_ctx_vivante_has_focus(void *data)
|
||||||
@ -261,6 +272,7 @@ static void gfx_ctx_vivante_set_flags(void *data, uint32_t flags)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_vivante_fbdev = {
|
const gfx_ctx_driver_t gfx_ctx_vivante_fbdev = {
|
||||||
gfx_ctx_vivante_init,
|
gfx_ctx_vivante_init,
|
||||||
gfx_ctx_vivante_destroy,
|
gfx_ctx_vivante_destroy,
|
||||||
|
gfx_ctx_vivante_get_api,
|
||||||
gfx_ctx_vivante_bind_api,
|
gfx_ctx_vivante_bind_api,
|
||||||
gfx_ctx_vivante_set_swap_interval,
|
gfx_ctx_vivante_set_swap_interval,
|
||||||
gfx_ctx_vivante_set_video_mode,
|
gfx_ctx_vivante_set_video_mode,
|
||||||
|
@ -1198,6 +1198,11 @@ static bool gfx_ctx_wl_has_windowed(void *data)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_wl_get_api(void *data)
|
||||||
|
{
|
||||||
|
return wl_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_wl_bind_api(void *video_driver,
|
static bool gfx_ctx_wl_bind_api(void *video_driver,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
@ -1205,6 +1210,7 @@ static bool gfx_ctx_wl_bind_api(void *video_driver,
|
|||||||
g_egl_major = major;
|
g_egl_major = major;
|
||||||
g_egl_minor = minor;
|
g_egl_minor = minor;
|
||||||
#endif
|
#endif
|
||||||
|
wl_api = api;
|
||||||
|
|
||||||
switch (api)
|
switch (api)
|
||||||
{
|
{
|
||||||
@ -1214,7 +1220,6 @@ static bool gfx_ctx_wl_bind_api(void *video_driver,
|
|||||||
if ((major * 1000 + minor) >= 3001)
|
if ((major * 1000 + minor) >= 3001)
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
wl_api = api;
|
|
||||||
return eglBindAPI(EGL_OPENGL_API);
|
return eglBindAPI(EGL_OPENGL_API);
|
||||||
#else
|
#else
|
||||||
break;
|
break;
|
||||||
@ -1225,21 +1230,18 @@ static bool gfx_ctx_wl_bind_api(void *video_driver,
|
|||||||
if (major >= 3)
|
if (major >= 3)
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
wl_api = api;
|
|
||||||
return eglBindAPI(EGL_OPENGL_ES_API);
|
return eglBindAPI(EGL_OPENGL_ES_API);
|
||||||
#else
|
#else
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case GFX_CTX_OPENVG_API:
|
case GFX_CTX_OPENVG_API:
|
||||||
#ifdef HAVE_VG
|
#ifdef HAVE_VG
|
||||||
wl_api = api;
|
|
||||||
return eglBindAPI(EGL_OPENVG_API);
|
return eglBindAPI(EGL_OPENVG_API);
|
||||||
#else
|
#else
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case GFX_CTX_VULKAN_API:
|
case GFX_CTX_VULKAN_API:
|
||||||
#ifdef HAVE_VULKAN
|
#ifdef HAVE_VULKAN
|
||||||
wl_api = api;
|
|
||||||
return true;
|
return true;
|
||||||
#else
|
#else
|
||||||
break;
|
break;
|
||||||
@ -1370,6 +1372,7 @@ static void gfx_ctx_wl_show_mouse(void *data, bool state)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_wayland = {
|
const gfx_ctx_driver_t gfx_ctx_wayland = {
|
||||||
gfx_ctx_wl_init,
|
gfx_ctx_wl_init,
|
||||||
gfx_ctx_wl_destroy,
|
gfx_ctx_wl_destroy,
|
||||||
|
gfx_ctx_wl_get_api,
|
||||||
gfx_ctx_wl_bind_api,
|
gfx_ctx_wl_bind_api,
|
||||||
gfx_ctx_wl_set_swap_interval,
|
gfx_ctx_wl_set_swap_interval,
|
||||||
gfx_ctx_wl_set_video_mode,
|
gfx_ctx_wl_set_video_mode,
|
||||||
|
@ -104,6 +104,11 @@ static enum gfx_ctx_api win32_api = GFX_CTX_NONE;
|
|||||||
static dylib_t dll_handle = NULL; /* Handle to OpenGL32.dll */
|
static dylib_t dll_handle = NULL; /* Handle to OpenGL32.dll */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef struct gfx_ctx_cgl_data
|
||||||
|
{
|
||||||
|
void *empty;
|
||||||
|
} gfx_ctx_wgl_data_t;
|
||||||
|
|
||||||
static gfx_ctx_proc_t gfx_ctx_wgl_get_proc_address(const char *symbol)
|
static gfx_ctx_proc_t gfx_ctx_wgl_get_proc_address(const char *symbol)
|
||||||
{
|
{
|
||||||
switch (win32_api)
|
switch (win32_api)
|
||||||
@ -460,12 +465,14 @@ static void gfx_ctx_wgl_get_video_size(void *data,
|
|||||||
|
|
||||||
static void *gfx_ctx_wgl_init(video_frame_info_t *video_info, void *video_driver)
|
static void *gfx_ctx_wgl_init(video_frame_info_t *video_info, void *video_driver)
|
||||||
{
|
{
|
||||||
WNDCLASSEX wndclass = {0};
|
WNDCLASSEX wndclass = {0};
|
||||||
|
gfx_ctx_wgl_data_t *wgl = (gfx_ctx_wgl_data_t*)calloc(1, sizeof(*wgl));
|
||||||
|
|
||||||
(void)video_driver;
|
if (!wgl)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
if (g_inited)
|
if (g_inited)
|
||||||
return NULL;
|
goto error;
|
||||||
|
|
||||||
#ifdef HAVE_DYNAMIC
|
#ifdef HAVE_DYNAMIC
|
||||||
dll_handle = dylib_load("OpenGL32.dll");
|
dll_handle = dylib_load("OpenGL32.dll");
|
||||||
@ -476,14 +483,14 @@ static void *gfx_ctx_wgl_init(video_frame_info_t *video_info, void *video_driver
|
|||||||
|
|
||||||
wndclass.lpfnWndProc = WndProcGL;
|
wndclass.lpfnWndProc = WndProcGL;
|
||||||
if (!win32_window_init(&wndclass, true, NULL))
|
if (!win32_window_init(&wndclass, true, NULL))
|
||||||
return NULL;
|
goto error;
|
||||||
|
|
||||||
switch (win32_api)
|
switch (win32_api)
|
||||||
{
|
{
|
||||||
case GFX_CTX_VULKAN_API:
|
case GFX_CTX_VULKAN_API:
|
||||||
#ifdef HAVE_VULKAN
|
#ifdef HAVE_VULKAN
|
||||||
if (!vulkan_context_init(&win32_vk, VULKAN_WSI_WIN32))
|
if (!vulkan_context_init(&win32_vk, VULKAN_WSI_WIN32))
|
||||||
return NULL;
|
goto error;
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case GFX_CTX_NONE:
|
case GFX_CTX_NONE:
|
||||||
@ -491,14 +498,18 @@ static void *gfx_ctx_wgl_init(video_frame_info_t *video_info, void *video_driver
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (void*)"wgl";
|
return wgl;
|
||||||
|
|
||||||
|
error:
|
||||||
|
if (wgl)
|
||||||
|
free(wgl);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gfx_ctx_wgl_destroy(void *data)
|
static void gfx_ctx_wgl_destroy(void *data)
|
||||||
{
|
{
|
||||||
HWND window = win32_get_window();
|
HWND window = win32_get_window();
|
||||||
|
gfx_ctx_wgl_data_t *wgl = (gfx_ctx_wgl_data_t*)data;
|
||||||
(void)data;
|
|
||||||
|
|
||||||
switch (win32_api)
|
switch (win32_api)
|
||||||
{
|
{
|
||||||
@ -557,6 +568,9 @@ static void gfx_ctx_wgl_destroy(void *data)
|
|||||||
dylib_close(dll_handle);
|
dylib_close(dll_handle);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (wgl)
|
||||||
|
free(wgl);
|
||||||
|
|
||||||
win32_core_hw_context_enable = false;
|
win32_core_hw_context_enable = false;
|
||||||
g_inited = false;
|
g_inited = false;
|
||||||
win32_major = 0;
|
win32_major = 0;
|
||||||
@ -643,6 +657,11 @@ static bool gfx_ctx_wgl_get_metrics(void *data,
|
|||||||
return win32_get_metrics(data, type, value);
|
return win32_get_metrics(data, type, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_wgl_get_api(void *data)
|
||||||
|
{
|
||||||
|
return win32_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_wgl_bind_api(void *data,
|
static bool gfx_ctx_wgl_bind_api(void *data,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
@ -734,6 +753,7 @@ static void gfx_ctx_wgl_get_video_output_next(void *data)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_wgl = {
|
const gfx_ctx_driver_t gfx_ctx_wgl = {
|
||||||
gfx_ctx_wgl_init,
|
gfx_ctx_wgl_init,
|
||||||
gfx_ctx_wgl_destroy,
|
gfx_ctx_wgl_destroy,
|
||||||
|
gfx_ctx_wgl_get_api,
|
||||||
gfx_ctx_wgl_bind_api,
|
gfx_ctx_wgl_bind_api,
|
||||||
gfx_ctx_wgl_swap_interval,
|
gfx_ctx_wgl_swap_interval,
|
||||||
gfx_ctx_wgl_set_video_mode,
|
gfx_ctx_wgl_set_video_mode,
|
||||||
|
@ -1043,6 +1043,11 @@ static gfx_ctx_proc_t gfx_ctx_x_get_proc_address(const char *symbol)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_x_get_api(void *data)
|
||||||
|
{
|
||||||
|
return x_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_x_bind_api(void *data, enum gfx_ctx_api api,
|
static bool gfx_ctx_x_bind_api(void *data, enum gfx_ctx_api api,
|
||||||
unsigned major, unsigned minor)
|
unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
@ -1187,6 +1192,7 @@ static void gfx_ctx_x_make_current(bool release)
|
|||||||
const gfx_ctx_driver_t gfx_ctx_x = {
|
const gfx_ctx_driver_t gfx_ctx_x = {
|
||||||
gfx_ctx_x_init,
|
gfx_ctx_x_init,
|
||||||
gfx_ctx_x_destroy,
|
gfx_ctx_x_destroy,
|
||||||
|
gfx_ctx_x_get_api,
|
||||||
gfx_ctx_x_bind_api,
|
gfx_ctx_x_bind_api,
|
||||||
gfx_ctx_x_swap_interval,
|
gfx_ctx_x_swap_interval,
|
||||||
gfx_ctx_x_set_video_mode,
|
gfx_ctx_x_set_video_mode,
|
||||||
|
@ -49,7 +49,7 @@ typedef struct
|
|||||||
bool should_reset_mode;
|
bool should_reset_mode;
|
||||||
} xegl_ctx_data_t;
|
} xegl_ctx_data_t;
|
||||||
|
|
||||||
static enum gfx_ctx_api x_api = GFX_CTX_NONE;
|
static enum gfx_ctx_api xegl_api = GFX_CTX_NONE;
|
||||||
|
|
||||||
static int x_nul_handler(Display *dpy, XErrorEvent *event)
|
static int x_nul_handler(Display *dpy, XErrorEvent *event)
|
||||||
{
|
{
|
||||||
@ -144,7 +144,7 @@ static void *gfx_ctx_xegl_init(video_frame_info_t *video_info, void *video_drive
|
|||||||
if (!xegl)
|
if (!xegl)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
switch (x_api)
|
switch (xegl_api)
|
||||||
{
|
{
|
||||||
case GFX_CTX_OPENGL_API:
|
case GFX_CTX_OPENGL_API:
|
||||||
attrib_ptr = egl_attribs_gl;
|
attrib_ptr = egl_attribs_gl;
|
||||||
@ -190,7 +190,7 @@ error:
|
|||||||
|
|
||||||
static EGLint *xegl_fill_attribs(xegl_ctx_data_t *xegl, EGLint *attr)
|
static EGLint *xegl_fill_attribs(xegl_ctx_data_t *xegl, EGLint *attr)
|
||||||
{
|
{
|
||||||
switch (x_api)
|
switch (xegl_api)
|
||||||
{
|
{
|
||||||
#ifdef EGL_KHR_create_context
|
#ifdef EGL_KHR_create_context
|
||||||
case GFX_CTX_OPENGL_API:
|
case GFX_CTX_OPENGL_API:
|
||||||
@ -452,12 +452,17 @@ static bool gfx_ctx_xegl_has_windowed(void *data)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum gfx_ctx_api gfx_ctx_xegl_get_api(void *data)
|
||||||
|
{
|
||||||
|
return xegl_api;
|
||||||
|
}
|
||||||
|
|
||||||
static bool gfx_ctx_xegl_bind_api(void *video_driver,
|
static bool gfx_ctx_xegl_bind_api(void *video_driver,
|
||||||
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
enum gfx_ctx_api api, unsigned major, unsigned minor)
|
||||||
{
|
{
|
||||||
g_egl_major = major;
|
g_egl_major = major;
|
||||||
g_egl_minor = minor;
|
g_egl_minor = minor;
|
||||||
x_api = api;
|
xegl_api = api;
|
||||||
|
|
||||||
switch (api)
|
switch (api)
|
||||||
{
|
{
|
||||||
@ -494,7 +499,7 @@ static void gfx_ctx_xegl_swap_buffers(void *data, void *data2)
|
|||||||
{
|
{
|
||||||
xegl_ctx_data_t *xegl = (xegl_ctx_data_t*)data;
|
xegl_ctx_data_t *xegl = (xegl_ctx_data_t*)data;
|
||||||
|
|
||||||
switch (x_api)
|
switch (xegl_api)
|
||||||
{
|
{
|
||||||
case GFX_CTX_OPENGL_API:
|
case GFX_CTX_OPENGL_API:
|
||||||
case GFX_CTX_OPENGL_ES_API:
|
case GFX_CTX_OPENGL_ES_API:
|
||||||
@ -512,7 +517,7 @@ static void gfx_ctx_xegl_bind_hw_render(void *data, bool enable)
|
|||||||
{
|
{
|
||||||
xegl_ctx_data_t *xegl = (xegl_ctx_data_t*)data;
|
xegl_ctx_data_t *xegl = (xegl_ctx_data_t*)data;
|
||||||
|
|
||||||
switch (x_api)
|
switch (xegl_api)
|
||||||
{
|
{
|
||||||
case GFX_CTX_OPENGL_API:
|
case GFX_CTX_OPENGL_API:
|
||||||
case GFX_CTX_OPENGL_ES_API:
|
case GFX_CTX_OPENGL_ES_API:
|
||||||
@ -531,7 +536,7 @@ static void gfx_ctx_xegl_set_swap_interval(void *data, unsigned swap_interval)
|
|||||||
{
|
{
|
||||||
xegl_ctx_data_t *xegl = (xegl_ctx_data_t*)data;
|
xegl_ctx_data_t *xegl = (xegl_ctx_data_t*)data;
|
||||||
|
|
||||||
switch (x_api)
|
switch (xegl_api)
|
||||||
{
|
{
|
||||||
case GFX_CTX_OPENGL_API:
|
case GFX_CTX_OPENGL_API:
|
||||||
case GFX_CTX_OPENGL_ES_API:
|
case GFX_CTX_OPENGL_ES_API:
|
||||||
@ -547,7 +552,7 @@ static void gfx_ctx_xegl_set_swap_interval(void *data, unsigned swap_interval)
|
|||||||
|
|
||||||
static gfx_ctx_proc_t gfx_ctx_xegl_get_proc_address(const char *symbol)
|
static gfx_ctx_proc_t gfx_ctx_xegl_get_proc_address(const char *symbol)
|
||||||
{
|
{
|
||||||
switch (x_api)
|
switch (xegl_api)
|
||||||
{
|
{
|
||||||
case GFX_CTX_OPENGL_ES_API:
|
case GFX_CTX_OPENGL_ES_API:
|
||||||
case GFX_CTX_OPENVG_API:
|
case GFX_CTX_OPENVG_API:
|
||||||
@ -582,6 +587,7 @@ const gfx_ctx_driver_t gfx_ctx_x_egl =
|
|||||||
{
|
{
|
||||||
gfx_ctx_xegl_init,
|
gfx_ctx_xegl_init,
|
||||||
gfx_ctx_xegl_destroy,
|
gfx_ctx_xegl_destroy,
|
||||||
|
gfx_ctx_xegl_get_api,
|
||||||
gfx_ctx_xegl_bind_api,
|
gfx_ctx_xegl_bind_api,
|
||||||
gfx_ctx_xegl_set_swap_interval,
|
gfx_ctx_xegl_set_swap_interval,
|
||||||
gfx_ctx_xegl_set_video_mode,
|
gfx_ctx_xegl_set_video_mode,
|
||||||
|
@ -223,8 +223,6 @@ static void *video_context_data = NULL;
|
|||||||
static bool deferred_video_context_driver_set_flags = false;
|
static bool deferred_video_context_driver_set_flags = false;
|
||||||
static gfx_ctx_flags_t deferred_flag_data = {0};
|
static gfx_ctx_flags_t deferred_flag_data = {0};
|
||||||
|
|
||||||
static enum gfx_ctx_api current_video_context_api = GFX_CTX_NONE;
|
|
||||||
|
|
||||||
static shader_backend_t *current_shader = NULL;
|
static shader_backend_t *current_shader = NULL;
|
||||||
static void *current_shader_data = NULL;
|
static void *current_shader_data = NULL;
|
||||||
|
|
||||||
@ -627,8 +625,6 @@ void video_context_driver_destroy(void)
|
|||||||
current_video_context.bind_hw_render = NULL;
|
current_video_context.bind_hw_render = NULL;
|
||||||
current_video_context.get_context_data = NULL;
|
current_video_context.get_context_data = NULL;
|
||||||
current_video_context.make_current = NULL;
|
current_video_context.make_current = NULL;
|
||||||
|
|
||||||
current_video_context_api = GFX_CTX_NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2890,8 +2886,6 @@ static const gfx_ctx_driver_t *video_context_driver_init(
|
|||||||
|
|
||||||
video_context_driver_set_data(ctx_data);
|
video_context_driver_set_data(ctx_data);
|
||||||
|
|
||||||
current_video_context_api = api;
|
|
||||||
|
|
||||||
return ctx;
|
return ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3202,27 +3196,31 @@ bool video_context_driver_set_flags(gfx_ctx_flags_t *flags)
|
|||||||
|
|
||||||
enum gfx_ctx_api video_context_driver_get_api(void)
|
enum gfx_ctx_api video_context_driver_get_api(void)
|
||||||
{
|
{
|
||||||
if (current_video_context_api == GFX_CTX_NONE)
|
enum gfx_ctx_api ctx_api = video_context_data ?
|
||||||
|
current_video_context.get_api(video_context_data) : GFX_CTX_NONE;
|
||||||
|
|
||||||
|
if (ctx_api == GFX_CTX_NONE)
|
||||||
{
|
{
|
||||||
const char *video_driver = video_driver_get_ident();
|
const char *video_driver = video_driver_get_ident();
|
||||||
|
|
||||||
if (string_is_equal(video_driver, "d3d9"))
|
if (string_is_equal(video_driver, "d3d9"))
|
||||||
current_video_context_api = GFX_CTX_DIRECT3D9_API;
|
return GFX_CTX_DIRECT3D9_API;
|
||||||
else if (string_is_equal(video_driver, "d3d10"))
|
else if (string_is_equal(video_driver, "d3d10"))
|
||||||
current_video_context_api = GFX_CTX_DIRECT3D10_API;
|
return GFX_CTX_DIRECT3D10_API;
|
||||||
else if (string_is_equal(video_driver, "d3d11"))
|
else if (string_is_equal(video_driver, "d3d11"))
|
||||||
current_video_context_api = GFX_CTX_DIRECT3D11_API;
|
return GFX_CTX_DIRECT3D11_API;
|
||||||
else if (string_is_equal(video_driver, "d3d12"))
|
else if (string_is_equal(video_driver, "d3d12"))
|
||||||
current_video_context_api = GFX_CTX_DIRECT3D12_API;
|
return GFX_CTX_DIRECT3D12_API;
|
||||||
else if (string_is_equal(video_driver, "gx2"))
|
else if (string_is_equal(video_driver, "gx2"))
|
||||||
current_video_context_api = GFX_CTX_GX2_API;
|
return GFX_CTX_GX2_API;
|
||||||
else if (string_is_equal(video_driver, "gl"))
|
else if (string_is_equal(video_driver, "gl"))
|
||||||
current_video_context_api = GFX_CTX_OPENGL_API;
|
return GFX_CTX_OPENGL_API;
|
||||||
else if (string_is_equal(video_driver, "vulkan"))
|
else if (string_is_equal(video_driver, "vulkan"))
|
||||||
current_video_context_api = GFX_CTX_VULKAN_API;
|
return GFX_CTX_VULKAN_API;
|
||||||
|
|
||||||
|
return GFX_CTX_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return current_video_context_api;
|
return ctx_api;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool video_driver_has_windowed(void)
|
bool video_driver_has_windowed(void)
|
||||||
|
@ -480,6 +480,8 @@ typedef struct gfx_ctx_driver
|
|||||||
void* (*init)(video_frame_info_t *video_info, void *video_driver);
|
void* (*init)(video_frame_info_t *video_info, void *video_driver);
|
||||||
void (*destroy)(void *data);
|
void (*destroy)(void *data);
|
||||||
|
|
||||||
|
enum gfx_ctx_api (*get_api)(void *data);
|
||||||
|
|
||||||
/* Which API to bind to. */
|
/* Which API to bind to. */
|
||||||
bool (*bind_api)(void *video_driver, enum gfx_ctx_api,
|
bool (*bind_api)(void *video_driver, enum gfx_ctx_api,
|
||||||
unsigned major, unsigned minor);
|
unsigned major, unsigned minor);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user