如何使用OpenGL + GLFW防止屏幕撕裂?

我正在开发一个支持多个操作系统和图形后端的图形应用程序。该窗口是使用GLFW创建的,并且在运行时选择了图形API。在Windows上运行该程序并使用OpenGL时,Vsync似乎已损坏。帧速率锁定为60 fps,但是会出现屏幕撕裂现象。根据GLFW文档,glfwSwapInterval(0);应该从使用VSync的默认值解锁帧速率。那按预期工作。使用glfwSwapInterval(1);应该将帧速率锁定为与监视器的刷新速率匹配。默认情况下,完全不调用glfwSwapInterval();应该使用VSync。在使用这些调用正确锁定/解锁帧频的同时,我经历了非常有趣的行为。

完全不调用glfwSwapInterval();时,将VSync设置为默认值。但是等待下一个帧发生在第一个抽奖电话中!有人会认为下一帧的延迟会发生在glfwSwapBuffers()。没有屏幕伪像可见。

调用glfwSwapInterval(1);时,将设置Vsync,下一帧的延迟发生在glfwSwapBuffers()!很好,但是,当明确设置VSync时,会出现屏幕撕裂痕迹。

现在,不通过使用VSync调用glfwSwapInterval()似乎是一个棘手的解决方案,但是:

  • 如果没有窗口重构,用户将无法禁用VSync,
  • 由于VSync等待时间在那里发生,探查器识别出第一次绘制调用的时间太长。

我尝试摆弄GPU驱动程序设置并在多台机器上测试代码。如果使用Windows和OpenGL,该问题将在整个计算机上持续存在。

如果任何人都可以理解这一点,请分享,或者如果我误解了一些东西,我将不胜感激一些朝着正确方向提出的指示。

编辑: 其他一些细节:撕裂发生在特定的水平线上。框架的其余部分似乎正常工作。

经过更多测试之后,似乎一切都在集成图形上按预期工作。如果我错了,请纠正我,但看起来像是图形驱动程序问题。

QQ5211982511 回答:如何使用OpenGL + GLFW防止屏幕撕裂?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2432577.html

大家都在问