调整窗口大小时出现奇怪的人工制品

时间:2021-02-10 20:27:20

标签: c++ opengl sdl-2

当我为我的 C++ 应用程序调整窗口大小并进行盘旋运动(只需拖动左上角一堆)时,它会导致一个奇怪的伪影。

enter image description here

当我松开鼠标时:

enter image description here

基本上发生的事情是在调整窗口大小时应用程序暂停。有没有办法解决这个问题?

编辑:感谢关闭我的问题家伙...

如果有人奇迹般地发现了这个问题,我就能找到自己的“解决方案”。帮自己一个忙,使用 freeGLUT 而不是 SDL2,就像一个魅力,设置也更容易。

1 个答案:

答案 0 :(得分:1)

几乎所有的窗口 API(Win32、GLFW 等)都有某种 PollEvents() 函数,可以将所有事件从事件队列中取出并进行处理。对于 Win32,您有一个回调函数,每个事件都会被调用,您可以单独处理它们,直到队列为空。对于 GLFW,您轮询事件,然后从更新的输入数据中读取某个键的状态(据我所知)。无论输入的具体实现如何,大多数 PollEvents() 函数在您调整窗口大小或移动窗口时都会阻塞。这意味着它将不断接收类型为 window resize 或 window move 的事件,即使没有变化。这会导致渲染不更新,从而导致各种奇怪的东西。解决这个问题的方法是将 PollEvents() 函数放在与更新循环不同的线程上并重复调用它。根据您使用的 API,可能会有一些限制。例如,GLFW 的 PollEvents() 函数必须在主线程上,强制更新循环在一个单独的线程上。但是,跨窗口 API 的想法仍然相同。

相关问题