当存在多个颜色缓冲区时,OpenGL中颜色和深度缓冲区之间的绑定是什么

时间:2013-11-24 09:22:02

标签: opengl glsl framebuffer depth-buffer

当有一个颜色缓冲区时,我确实理解了默认FB和帧缓冲区对象背后的概念和颜色和深度缓冲区。 但我不明白的是,当有多个颜色缓冲区时,深度缓冲区如何“绑定”到颜色缓冲区。

例如:

  1. 如果有多个渲染目标,我们可以将N个颜色缓冲区附加到不同的颜色附着点。但我们只有1个深度附着点。这是否意味着在所有颜色附着点之间,仅根据深度缓冲区的深度值计算第一个(COLOR_ATTACHMENT0)最终像素颜色?剩下的颜色缓冲区的颜色怎么样?他们是否忽略深度比较以确定它们的最终像素颜色?

  2. 分层渲染的情况如何?假设我将大小为N的纹理数组(GL_TEXTURE_2D_ARRAY)附加到第一个颜色缓冲区(COLOR_ATTACHMENT0)。我现在必须附加GL_TEXTURE_2D_ARRAY类型的深度纹理(否则它是一个不完整的附件)。这个深度附件的大小应该是多少。如果我将其设为N,每个图层都会获得深度值吗?或者N必须是1?

  3. 请专家解答两个问题。感谢。

1 个答案:

答案 0 :(得分:3)

  1. 每个片段使用一次深度缓冲区。如果深度测试失败,则丢弃整个片段,因此不会执行任何对任何颜色缓冲区的写入。

  2. 片段将使用与其所在层对应的深度缓冲区。例如,如果片段被写入gl_Layer 2,它将使用深度缓冲区和颜色缓冲区的第3层。