2012-01-12 95 views
2

了OpenGL 4.2规格(第3.3.1节)中明确指出:多重采样FBO深度/模板和OpenGL规范

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

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

这是违背规范还是我错过了什么?

回答

3

好吧,让我们来看看。第4.4.4节规定:

甲帧缓冲区对象被说成是帧缓冲器完整,如果所有其附 图像,并且利用用于再现和读出帧缓冲器所需的所有帧缓冲器的参数,定义一致并且符合要求定义如下。帧缓冲区完整性的规则取决于所附图像的属性以及某些实现相关的限制。

在所提及的“下方”的许多规则:

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

因此,如果您的深度/模板缓冲区未被多重采样,而您的颜色缓冲区是多重采样的,那么您的FBO将不会完成。而且你不能渲染到一个不完整的帧缓冲区对象。

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

+0

是的,当然我会在draw_renderbuffer的相同样本中添加一个depth_stencil多重采样的渲染缓冲区(当然否则fbo不会完成),但是我在第3.3节时首先提出了深度/模板的需求。 1声明这样的bufefr不应该出现在多采样的fbo中 – user815129 2012-01-13 06:43:51

+0

@ user815129:然而,3.3.1节没有对多采样的FBO **做任何说明。它正在专门讨论* default framebuffer *。 – 2012-01-13 06:50:44

+0

是的,我认为也是这样,我只是张贴来看看ms fbo是否需要depth_stencil根据别人的经验.. – user815129 2012-01-13 07:20:28