OpenGL窗口系统屏幕撕裂预防

时间:2013-01-12 06:57:23

标签: opengl buffer swap vsync tearing

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

1 个答案:

答案 0 :(得分:3)

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

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

因此,“垂直回扫”是指您可以更新显示帧缓冲区数据的时间跨度,不会影响绘图过程。

  

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

不,你没有“使用”vsync。您使用双缓冲,通过V-Sync同步交换。

  

但我想用页面翻转缓冲区交换

替换它

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