21 #include "../../SDL_internal.h"
23 #if SDL_VIDEO_DRIVER_WAYLAND
25 #define DEBUG_DYNAMIC_WAYLAND 0
30 #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
41 #ifndef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL
42 #define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL NULL
44 #ifndef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR
45 #define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR NULL
47 #ifndef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON
48 #define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON NULL
51 static waylanddynlib waylandlibs[] = {
52 {
NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC},
53 {
NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL},
54 {
NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR},
55 {
NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON}
59 WAYLAND_GetSym(
const char *fnname,
int *pHasModule)
64 if (waylandlibs[
i].lib !=
NULL) {
71 #if DEBUG_DYNAMIC_WAYLAND
73 SDL_Log(
"WAYLAND: Found '%s' in %s (%p)\n", fnname, waylandlibs[
i].libname, fn);
75 SDL_Log(
"WAYLAND: Symbol '%s' NOT FOUND!\n", fnname);
87 #define SDL_WAYLAND_MODULE(modname) int SDL_WAYLAND_HAVE_##modname = 0;
88 #define SDL_WAYLAND_SYM(rc,fn,params) SDL_DYNWAYLANDFN_##fn WAYLAND_##fn = NULL;
89 #define SDL_WAYLAND_INTERFACE(iface) const struct wl_interface *WAYLAND_##iface = NULL;
92 static int wayland_load_refcount = 0;
98 if (wayland_load_refcount > 0) {
99 if (--wayland_load_refcount == 0) {
100 #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
105 #define SDL_WAYLAND_MODULE(modname) SDL_WAYLAND_HAVE_##modname = 0;
106 #define SDL_WAYLAND_SYM(rc,fn,params) WAYLAND_##fn = NULL;
107 #define SDL_WAYLAND_INTERFACE(iface) WAYLAND_##iface = NULL;
111 #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
113 if (waylandlibs[
i].lib !=
NULL) {
115 waylandlibs[
i].lib =
NULL;
130 if (wayland_load_refcount++ == 0) {
131 #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
135 if (waylandlibs[
i].libname !=
NULL) {
140 #define SDL_WAYLAND_MODULE(modname) SDL_WAYLAND_HAVE_##modname = 1;
143 #define SDL_WAYLAND_MODULE(modname) thismod = &SDL_WAYLAND_HAVE_##modname;
144 #define SDL_WAYLAND_SYM(rc,fn,params) WAYLAND_##fn = (SDL_DYNWAYLANDFN_##fn) WAYLAND_GetSym(#fn,thismod);
145 #define SDL_WAYLAND_INTERFACE(iface) WAYLAND_##iface = (struct wl_interface *) WAYLAND_GetSym(#iface,thismod);
148 if (SDL_WAYLAND_HAVE_WAYLAND_CLIENT) {
159 #define SDL_WAYLAND_MODULE(modname) SDL_WAYLAND_HAVE_##modname = 1;
160 #define SDL_WAYLAND_SYM(rc,fn,params) WAYLAND_##fn = fn;
161 #define SDL_WAYLAND_INTERFACE(iface) WAYLAND_##iface = &iface;
void * SDL_LoadFunction(void *handle, const char *name)
#define SDL_TABLESIZE(table)
int SDL_WAYLAND_LoadSymbols(void)
void SDL_WAYLAND_UnloadSymbols(void)
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)