我正在使用 tao (C#)。我可以防止OpenGL
使用缓冲区进行绘图吗?
我遇到了一个我正在使用的场景,simpleOpenGlControl
并且需要阻止它使用另一个缓冲区。
我正在使用 tao (C#)。我可以防止OpenGL
使用缓冲区进行绘图吗?
我遇到了一个我正在使用的场景,simpleOpenGlControl
并且需要阻止它使用另一个缓冲区。
有趣的是,是否存在双缓冲区的可用性/执行不是由 OpenGL 选择的,而是由窗口系统选择的。通过在窗口的像素格式/视觉(不是 OpenGL 上下文)中指定“我想要一个双缓冲区”位来请求双缓冲区。
但是,即使您没有要求,窗口系统也很可能会选择为您提供双缓冲区。这就是为什么检查你实际得到的像素格式/视觉效果如此重要的原因,如果它有双缓冲区,你的程序必须相应地采取行动。
话虽如此,OpenGL 本身知道如何使用双缓冲窗口(请注意,实际的缓冲区交换函数不是OpenGL 函数,而是窗口系统的函数)。
您可以通过选择它作为绘图目标显式绘制到前缓冲区glDrawBuffer(GL_FRONT)
。然而,现代窗口系统通常是复合的,这意味着程序的“前端”缓冲区实际上只是窗口系统的另一个屏幕外缓冲区,在演示步骤中作为一个整体呈现。……这最终意味着,整个事情的表现就好像你把整个事情都画了双缓冲一样。
通常根本没有充分的理由来绘制单个缓冲。“视觉”效果是——取决于你所使用的实现——你可能能够看到绘图过程是如何进行的。但这不是给定的。OpenGL 实现将所有绘图操作排队并在显示刷新之间执行它们是完全有效的,这又看起来像双缓冲。