解释不同类型的绘制缓冲区

时间:2014-04-23 06:38:41

标签: opengl glsl

为什么我们需要所有这些缓冲区:

GL_FRONT_LEFT,GL_FRONT_RIGHT,        GL_BACK_LEFT,GL_BACK_RIGHT,GL_FRONT,GL_BACK,GL_LEFT,        GL_RIGHT,GL_FRONT_AND_BACK和GL_AUXi,其中我是        介于0和GL_AUX_BUFFERS之间。

GL_FRONT和GL_BACK对我有意义,但对其他人没有意义。有人会举例说明GL_BACK_LEFT吗?

当我说GL_FRONT_ABD_BACK时,它会向前后缓冲区的所有左右移动(即总共4个缓冲区)。将相同图像渲染到所有4个缓冲区的用例有哪些?有什么例子吗?

2 个答案:

答案 0 :(得分:3)

缓冲区的LEFT / RIGHT区别用于立体显示。对于双缓冲立体声,您可以将左眼图像渲染到GL_BACK_LEFT缓冲区,将右眼图像渲染到GL_BACK_RIGHT缓冲区,然后交换缓冲区。

在立体声模式下,如果要为GL_BACK_LEFT_和GL_BACK_RIGHT渲染相同的内容,则使用GL_BACK。这是非常罕见的。

您对GL_FRONT_AND_BACK的判断是正确的。渲染到前端缓冲区已经过时了,无论如何只适用于特殊情况。一个典型的例子是在已经显示的帧上绘制使用OpenGL的特殊光标,如十字光标。同时渲染正面和背面都没那么有用。我现在无法想到一个好的用例。

AUX缓冲区也很久就被弃用了。我相信它们的目的是在需要额外颜色缓冲的地方渲染效果。如今,您可以将FBO用于同一目的。

答案 1 :(得分:1)

FRONT和BACK区别是指双缓冲 - 通常程序绘制到后缓冲区然后将其交换到前面,以便始终向用户显示完整的帧。

LEFT和RIGHT的区别在于立体渲染(使用稍微不同的视点渲染左眼和右眼的图像)。

当然,大多数立体渲染硬件也支持双缓冲,导致组合GL_FRONT / BACK_LEFT / RIGHT。

实际可用的缓冲区取决于您请求的上下文以及(当然)底层系统的功能。 GL_FRONT可能与GL_FRONT_LEFT和GL_FRONT_RIGHT中的一个或另一个具有相同的定义值,对于GL_BACK也是如此,尽管不能保证。

GL_AUXi缓冲区是特定于实现的。我怀疑它们通常用于覆盖平面。