2

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

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

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

这是否违反规格或我错过了什么?

4

1 回答 1

3

走着瞧。第 4.4.4 节指出:

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

在“以下”提到的许多规则中:

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

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

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

于 2012-01-12T20:34:40.693 回答