我有一个通过Derelict 3访问的SDL2窗口。
它应该是黑白闪光灯(不是因为我讨厌癫痫患者),它成功地做到了这一点。然而,经过一段时间后,Ubuntu 13.10会将窗口标记为"无响应",使其变灰,并减弱频闪效果。
这非常刺激,完全扼杀了应用程序从我的EEG耳机中检索SSVEP读数所需的视觉刺激效果。
我如何让我的操作系统意识到窗口正在做它应该做的事情?
代码
由于我已经在实际代码中封装了SDL调用,我将提供伪代码和在这些部分中调用的SDL方法(我已经检查了我是否没有调用任何其他SDL函数):
make a window using SDL_CreateWindow (no set flags)
make a renderer using SDL_CreateRenderer (with presentvsync flag set)
for( ... )
{
fill screen black using SDL_RenderFillRect and SDL_SetRenderDrawColor
update screen using SDL_RenderPresent
fill screen white (same as above filling)
update screen (same as above update)
}
exit
我严格检查包装库中所有SDL调用的错误代码和返回值。他们都很好。我需要知道的是,我必须添加什么才能为我的操作系统提供心跳,这样它就不会在我的窗口中变灰。
另一件事
有人能添加SDL2标签吗?SDL2具有与SDL1.2非常不同的API…
通过SDL_PollEvent(null)
将事件处理添加到循环中。这让操作系统感到满意。
对于任何使用Ubuntu 16.04和SDL2.0x的人-对我有效的解决方案是:
SDL_SetHint(SDL_HINT_VIDEO_X11_NET_WM_PING,"0");
在SDL_Init()之后立即设置;呼叫请参阅:SDL2 wiki。