【发布时间】:2017-10-27 04:57:02
【问题描述】:
我有一个典型的 SDL 事件循环调用 SDL_WaitEvent,并遇到了一个备受争议的问题(请参阅 here 和 here),我的应用程序在调整大小期间无法重新绘制,因为 SDL_WaitEvent在某些平台(Win32 和 Mac OS)上完成调整大小之前不会返回。在每个讨论中,都提到了使用SDL_SetEventFilter 绕过它的技术,并且或多或少地被接受为一种解决方案和一种技巧。
使用SDL_SetEventFilter 方法效果很好,但现在我正在查看我的代码,实际上我已经将所有代码从SDL_WaitEvent 移到了我的EventFilter 中并在那里处理事件。
从架构上讲,它很可疑。
除了可能在单独的线程上调用之外,在SDL_SetEventFilter 设置的函数中向我的应用程序发送消息的这种方法是否有任何问题?
额外问题:SDL 如何在内部处理此问题?据我了解,这个调整大小问题根源于底层平台。例如,Win32 将发出 WM_SIZING,然后进入自己的内部消息泵,直到发出 WM_SIZE。是什么触发了 SDL EventFilter 运行?
【问题讨论】:
-
SDL_PollEvent反对什么?与其无限期地等待事件,不如在每个周期轮询它们(如果有)。 -
这没有帮助。 SDL_PollEvent 的行为与 SDL_WaitEvent 完全相同,并且会阻塞直到调整大小/移动完成
-
如果它解决了问题,我不会将其作为评论发布,对吧?这只是一个离题的建议。
-
那我不知道你想让我回答什么。我没有使用 SDL_PollEvent 因为我不需要超时。我会通过轮询而不是等待来浪费不必要的周期。