我目前正在使用C和SDL2,我需要知道Wayland当前是否用作窗口系统(显然是因为我想使用Wayland,但SDL2默认为Xwayland).虽然SDL_VIDEODRIVER=wayland
可以工作,但如果您使用的是X11,即视频驱动程序不可用,它将无法工作.因此,我要寻找的是一种获取当前窗口系统的低级方法(可能通过询问合成器?)在GNU/Linux上.它还需要不可修改,也就是说,除非会话结束,否则任何应用程序或用户都无法更改它.
我目前正在使用C和SDL2,我需要知道Wayland当前是否用作窗口系统(显然是因为我想使用Wayland,但SDL2默认为Xwayland).虽然SDL_VIDEODRIVER=wayland
可以工作,但如果您使用的是X11,即视频驱动程序不可用,它将无法工作.因此,我要寻找的是一种获取当前窗口系统的低级方法(可能通过询问合成器?)在GNU/Linux上.它还需要不可修改,也就是说,除非会话结束,否则任何应用程序或用户都无法更改它.
通过SDL_Init(0)
初始化没有子系统的SDL,然后要求SDL连接到通过SDL_VideoInit("wayland")
运行的任何Wayland会话;如果那通电话成功了,你可以 Select 通常的SDL_Init(SDL_INIT_EVERYTHING)
&;窗口创建.
不过,为了更具稳健性,您应该遍历SDL_GetNumVideoDrivers()
/SDL_GetVideoDriver()
字符串列表,以验证使用的SDL安装甚至是使用Wayland支持构建的.
有关视频驱动程序枚举,请参阅测试程序here;测试.