繁体   English   中英

OpenGL-防止双缓冲区

[英]OpenGL - Prevent double buffers

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

我进入一个正在使用simpleOpenGlControl的场景,需要防止它使用另一个缓冲区。

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

但是,即使您不要求窗口系统,窗口系统也很可能选择为您提供双倍缓冲区。 这就是检查以下内容如此重要的原因:您实际获得了哪种像素格式/图像,并且如果它具有双缓冲区,则您的程序必须相应地执行操作。

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

您可以使用glDrawBuffer(GL_FRONT)将其选择为绘制目标位置,从而显式绘制到前缓冲区。 但是,现代的窗口系统通常是复合的 ,这意味着您程序的“前”缓冲区实际上只是窗口系统的另一个屏幕外缓冲区,在呈现步骤中会整体呈现。 ……这最终意味着,整个行为就像您将整个事物绘制为双缓冲一样。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM