我目前正在使用 MRT 通过 FBO+RTT 进行渲染,我正在研究通过多重采样(而不是超级采样)实现抗锯齿的可能性,但我对规范有点困惑(我参考 opengl 规范 4.2 - 所以 FBO 中的多重采样纹理是支持)以及我读过的内容..特别是:
1)
如果我做对了,我有 2 个选项:a) 通过多重采样渲染缓冲区进行多重采样,或 b) 使用多重采样纹理进行多重采样(并像我现在一样继续使用 RTT),现在:
两种方法都产生相同的输出吗?
2)
我使用 RTT,因为我需要 4 个颜色附件进行多通道渲染。在第一个场景被渲染为纹理后,该纹理随后被馈送到不同的片段着色器,这些着色器通过普通的 sampler2D 访问其数据。
我应该使用渲染缓冲区而不是纹理,片段着色器是否可以访问渲染缓冲区的数据?
3)
我在规范中读到,附加了多采样渲染缓冲区的 FBO 不需要深度/模板,因为该信息保存在多采样渲染缓冲区中
这是否意味着附加了多重采样渲染缓冲区的每个颜色附件都有自己的深度/模板?
在 FBO 中将多重采样纹理作为 RT 怎么样?我不认为他们存储任何深度/模板信息..我是对的吗?如果我使用 FBO+多重采样纹理实现多重采样,我还需要 DEPTH_STENCIL_ATTACHMENT 吗?如果是这样,那么在深度上进行多重采样呢?
4)
我只需要 1 个纹理/渲染缓冲区来抗锯齿,而另一个必须保持其锯齿状边缘。我在规范中读到使用 FBO 和多重采样,每个附加的可渲染必须具有相同数量的样本(尽管大小可能不同) .
有没有办法只对 2 个 RT 中的 1 个进行多重采样?这是关于 teximage2DMultisample (fixedsampledlocation) 中最后一个参数的规范所说的:
If fixedsamplelocations is TRUE, the image will use identical
sample locations and the same number of samples for all texels
in the image, and the sample locations will not depend on the
internalformat or size of the image.
这是否意味着固定样本位置的多重采样纹理将保持多重采样格式,但实际上表现为常规(非多重采样)纹理?(即:每个样本位置都将具有相同的值)?