2

我有一个通过 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 ...

4

2 回答 2

3

通过 将事件处理添加到循环中SDL_PollEvent(null)。这满足了操作系统。

于 2013-08-11T00:36:47.570 回答
2

对于使用 Ubuntu 16.04 和 SDL2.0x 的任何人 - 对我有用的解决方案是:

SDL_SetHint(SDL_HINT_VIDEO_X11_NET_WM_PING,"0");

在您的 SDL_Init() 之后立即设置;称呼。请参阅:此处的 SDL2 wiki。

于 2018-08-28T12:19:49.163 回答