【问题标题】:Weird artefact when resizing window [closed]调整窗口大小时出现奇怪的伪影[关闭]
【发布时间】:2021-05-14 14:10:45
【问题描述】:

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

当我松开鼠标时:

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

编辑:感谢您结束我的问题...

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

【问题讨论】:

标签: c++ opengl sdl-2


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 2018-01-09
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多