多重采样FBO深度/模板和OpenGL规范

时间:2012-01-12 09:44:03

标签: opengl glsl fbo multisampling

OpenGL 4.2规范(第3.3.1节)明确指出:

  

因为每个样本包括颜色,深度和模板信息,颜色(包括   纹理操作),深度和模板功能等效于   单样本模式。   一个名为多重采样缓冲区的附加缓冲区被添加到帧缓冲区。   像素样本值(包括颜色,深度和模板值)存储在此中   缓冲。样本包含每种片段颜色的单独颜色值。   :当   帧缓冲包括一个多重采样缓冲区,它不包括深度或模板   缓冲区,即使多重采样缓冲区不存储深度或模板值。   但是,颜色缓冲区与多重采样缓冲区共存。

但是,如果我需要深度/模板测试,我必须设置一个depth_stencil多重采样渲染缓冲区。

这是违反规范还是遗漏了什么?

1 个答案:

答案 0 :(得分:3)

嗯,让我们看看。第4.4.4节规定:

  

如果帧缓冲对象全部附着,则说它是帧缓冲完成的   图像以及利用帧缓冲器进行渲染和读取所需的所有帧缓冲参数都是一致定义的,并满足下面定义的要求。帧缓冲完整性的规则取决于附加图像的属性,以及某些依赖于实现的限制。

在下面提到的众多规则中:

  

对于所有附加的渲染缓冲区,RENDERBUFFER_SAMPLES的值是相同的; TEXTURE_SAMPLES的值对于所有附加的文本都是相同的;并且,如果附加的图像是渲染缓冲区和纹理的混合,则RENDERBUFFER_SAMPLES的值与TEXTURE_-SAMPLES的值匹配。

因此,如果您的深度/模板缓冲区未进行多重采样,而您的颜色缓冲区是多重采样的,那么您的FBO将无法完成。并且您无法渲染到不完整的帧缓冲对象。

所以是的,您不仅要确保它们是多重采样的,还必须使用相同的数量的样本。