【问题标题】:OpenGL window systems screen tearing preventionOpenGL窗口系统屏幕撕裂预防
【发布时间】:2012-12-26 19:08:51
【问题描述】:

在我的 OpenGL 应用程序中,出于明显的原因,我想防止屏幕撕裂。到目前为止,我一直在使用 vsync。但我想用翻页缓冲区交换(更改指向监视器数据的指针而不是更改值)来替换它以提高性能。我的问题是:重要的窗口系统(Windows、Cocoa、X11)是否完全支持这种缓冲区交换,是否需要明确请求,还是默认行为?

【问题讨论】:

    标签: opengl buffer swap vsync tearing


    【解决方案1】:

    V-Sync 是“垂直回溯同步”。如果启用了 V-Sync,则意味着当显示器未绘制时,双缓冲区在该时间跨度内被交换。这是从 CRT 显示器时代继承下来的术语,其中使用电子束从左上角到底部逐行绘制图像。当光束到达右下角时,它必须返回到右上角。电子束是使用两对电磁线圈控制的,并且(与示波器中的静电偏转器不同)不能超过一定的转换速率。这就是垂直同步

    今天,显示器仍将其数据逐行接收到显示器内部的缓冲区中。在整个帧的末尾插入一个小停顿。

    因此,“垂直回溯”是您可以在不干扰绘图过程的情况下更新显示帧缓冲区中的数据的时间跨度。

    到目前为止,我一直在使用 vsync。

    不,你没有“使用”垂直同步。您确实使用了双缓冲,该交换由 V-Sync 同步。

    但我想用翻页缓冲区交换替换它

    这不是您的决定。使用何种方法由图形硬件及其驱动程序选择。您的程序存在于用户空间中,甚至无法与硬件进行低级别对话。并且通常使用在这种情况下表现最好的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多