C# OpenGL-防止双缓冲区

C# OpenGL-防止双缓冲区,c#,opengl,tao-framework,C#,Opengl,Tao Framework,我在用tao(C#)。我可以阻止OpenGL使用缓冲区进行绘图吗 我使用的是SimplePenglControl,需要防止它使用另一个缓冲区 有趣的是,doublebuffer的可用性/实施是否存在不是OpenGL可以选择的,而是窗口系统。通过在窗口的pixelformat/visual(而不是OpenGL上下文)中指定“我想要一个双缓冲区”位来请求双缓冲区 然而,窗口系统很可能会选择给你一个双缓冲区,即使你没有要求一个。这就是为什么检查非常重要的原因,检查您实际使用的像素格式/视觉效果,以及是

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


我使用的是
SimplePenglControl
,需要防止它使用另一个缓冲区

有趣的是,doublebuffer的可用性/实施是否存在不是OpenGL可以选择的,而是窗口系统。通过在窗口的pixelformat/visual(而不是OpenGL上下文)中指定“我想要一个双缓冲区”位来请求双缓冲区

然而,窗口系统很可能会选择给你一个双缓冲区,即使你没有要求一个。这就是为什么检查非常重要的原因,检查您实际使用的像素格式/视觉效果,以及是否有双缓冲区,您的程序必须相应地进行操作

也就是说,OpenGL本身知道如何使用双缓冲窗口(请注意,实际的缓冲区交换函数不是OpenGL函数,而是窗口系统的函数)

通过使用
glDrawBuffer(GL\u front)
将其选择为绘图目标,可以显式绘制到前缓冲区。然而,现代的窗口系统通常是合成的,这意味着您的程序的“前端”缓冲区实际上只是窗口系统的另一个屏幕外缓冲区,在呈现步骤中作为一个整体呈现…这最终意味着,整个对象的行为就像您绘制了整个对象的双缓冲区一样


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

有趣的是,双缓冲区的可用性/实施与否不是OpenGL可以选择的,而是窗口系统。通过在窗口的pixelformat/visual(而不是OpenGL上下文)中指定“我想要一个双缓冲区”位来请求双缓冲区

然而,窗口系统很可能会选择给你一个双缓冲区,即使你没有要求一个。这就是为什么检查非常重要的原因,检查您实际使用的像素格式/视觉效果,以及是否有双缓冲区,您的程序必须相应地进行操作

也就是说,OpenGL本身知道如何使用双缓冲窗口(请注意,实际的缓冲区交换函数不是OpenGL函数,而是窗口系统的函数)

通过使用
glDrawBuffer(GL\u front)
将其选择为绘图目标,可以显式绘制到前缓冲区。然而,现代的窗口系统通常是合成的,这意味着您的程序的“前端”缓冲区实际上只是窗口系统的另一个屏幕外缓冲区,在呈现步骤中作为一个整体呈现…这最终意味着,整个对象的行为就像您绘制了整个对象的双缓冲区一样


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

演示如何设置窗口。除非您指定
Gdi.PFD\u DOUBLEBUFFER
,否则tao将不会使用双缓冲。仅用于记录:tao或多或少是死的,并被OpenTK()取代。显示如何设置窗口。除非您指定
Gdi.PFD\u DOUBLEBUFFER
,否则tao将不会使用双缓冲。并且仅用于记录:tao或多或少是死的,并被OpenTK()取代。