当我为我的 C++ 应用程序调整窗口大小并进行盘旋运动(只需拖动左上角一堆)时,它会导致一个奇怪的伪影。
当我松开鼠标时:
基本上发生的事情是在调整窗口大小时应用程序暂停。有没有办法解决这个问题?
编辑:感谢关闭我的问题家伙...
如果有人奇迹般地发现了这个问题,我就能找到自己的“解决方案”。帮自己一个忙,使用 freeGLUT 而不是 SDL2,就像一个魅力,设置也更容易。
答案 0 :(得分:1)
几乎所有的窗口 API(Win32、GLFW 等)都有某种 PollEvents() 函数,可以将所有事件从事件队列中取出并进行处理。对于 Win32,您有一个回调函数,每个事件都会被调用,您可以单独处理它们,直到队列为空。对于 GLFW,您轮询事件,然后从更新的输入数据中读取某个键的状态(据我所知)。无论输入的具体实现如何,大多数 PollEvents() 函数在您调整窗口大小或移动窗口时都会阻塞。这意味着它将不断接收类型为 window resize 或 window move 的事件,即使没有变化。这会导致渲染不更新,从而导致各种奇怪的东西。解决这个问题的方法是将 PollEvents() 函数放在与更新循环不同的线程上并重复调用它。根据您使用的 API,可能会有一些限制。例如,GLFW 的 PollEvents() 函数必须在主线程上,强制更新循环在一个单独的线程上。但是,跨窗口 API 的想法仍然相同。