21#include "../../SDL_internal.h"
23#if SDL_VIDEO_DRIVER_WAYLAND
25#define DEBUG_DYNAMIC_WAYLAND 0
29#if DEBUG_DYNAMIC_WAYLAND
33#ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
44#ifndef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
45#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC NULL
47#ifndef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL
48#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL NULL
50#ifndef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR
51#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR NULL
53#ifndef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON
54#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON NULL
57static waylanddynlib waylandlibs[] = {
58 {
NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC},
59 {
NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL},
60 {
NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR},
61 {
NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON}
65WAYLAND_GetSym(
const char *fnname,
int *pHasModule)
70 if (waylandlibs[
i].lib !=
NULL) {
77#if DEBUG_DYNAMIC_WAYLAND
79 SDL_Log(
"WAYLAND: Found '%s' in %s (%p)\n", fnname, waylandlibs[
i].libname, fn);
81 SDL_Log(
"WAYLAND: Symbol '%s' NOT FOUND!\n", fnname);
93#define SDL_WAYLAND_MODULE(modname) int SDL_WAYLAND_HAVE_##modname = 0;
94#define SDL_WAYLAND_SYM(rc,fn,params) SDL_DYNWAYLANDFN_##fn WAYLAND_##fn = NULL;
95#define SDL_WAYLAND_INTERFACE(iface) const struct wl_interface *WAYLAND_##iface = NULL;
98static int wayland_load_refcount = 0;
104 if (wayland_load_refcount > 0) {
105 if (--wayland_load_refcount == 0) {
106#ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
111#define SDL_WAYLAND_MODULE(modname) SDL_WAYLAND_HAVE_##modname = 0;
112#define SDL_WAYLAND_SYM(rc,fn,params) WAYLAND_##fn = NULL;
113#define SDL_WAYLAND_INTERFACE(iface) WAYLAND_##iface = NULL;
117#ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
119 if (waylandlibs[
i].lib !=
NULL) {
121 waylandlibs[
i].lib =
NULL;
136 if (wayland_load_refcount++ == 0) {
137#ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
141 if (waylandlibs[
i].libname !=
NULL) {
146#define SDL_WAYLAND_MODULE(modname) SDL_WAYLAND_HAVE_##modname = 1;
149#define SDL_WAYLAND_MODULE(modname) thismod = &SDL_WAYLAND_HAVE_##modname;
150#define SDL_WAYLAND_SYM(rc,fn,params) WAYLAND_##fn = (SDL_DYNWAYLANDFN_##fn) WAYLAND_GetSym(#fn,thismod);
151#define SDL_WAYLAND_INTERFACE(iface) WAYLAND_##iface = (struct wl_interface *) WAYLAND_GetSym(#iface,thismod);
154 if (SDL_WAYLAND_HAVE_WAYLAND_CLIENT) {
165#define SDL_WAYLAND_MODULE(modname) SDL_WAYLAND_HAVE_##modname = 1;
166#define SDL_WAYLAND_SYM(rc,fn,params) WAYLAND_##fn = fn;
167#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)