OpenGL - 防止双缓冲区

时间:2016-12-20 01:42:53

标签: c# opengl tao-framework

我正在使用tao(C#)。我可以阻止OpenGL使用缓冲区进行绘制吗?

我正在使用simpleOpenGlControl并且需要阻止它使用另一个缓冲区。

1 个答案:

答案 0 :(得分:2)

有趣的是,双缓冲的存在/执行是否适合OpenGL选择,而不是窗口系统。通过指定"我想要一个双缓冲器"来请求双缓冲器。位于窗口的pixelformat / visual中(而不是OpenGL上下文)。

然而,即使你没有要求,窗口系统也可以选择给你一个双缓冲。这就是为什么检查它的重要性,实际得到的像素格式/视觉效果,以及它是否有双缓冲区,你的程序必须采取相应的行动。

话虽这么说,OpenGL本身知道如何使用双缓冲窗口(请注意,实际的缓冲交换功能不是 OpenGL功能,而是窗口系统的功能)。

您可以显式绘制到前端缓冲区,方法是选择它作为具有glDrawBuffer(GL_FRONT)的绘图目标。然而,现代窗口系统通常是合成,这意味着您的程序的前端"缓冲区实际上只是窗口系统的另一个屏幕外缓冲区,它在演示步骤中作为一个整体呈现。 ...这最终意味着,整个事情的行为就像你已经把整个事物画成了双重缓冲。

通常没有任何理由可以绘制单个缓冲区。 "视觉"效果是,根据您的实施情况,您可以看到绘图过程的进展情况。 这不是给定的。对于OpenGL实现来说,排队所有绘图操作并在显示刷新之间执行它们是完全有效的,这看起来像是双缓冲。