OpenGL - MSAA 不支持浮点纹理吗?

OpenGL - Does MSAA not support floating-point texture?

事情是这样的,我正在尝试使用多重采样纹理进行延迟着色。 为了创建 GBuffer,我创建了一个带有多采样纹理附件的帧缓冲区以在其上绘制,以及一个带有普通纹理附件的帧缓冲区用于复制结果。 (因为我不能直接读取多重采样纹理)。

光照通过后,我发现边缘没有正确抗锯齿,见下图。

(可以看到光影之间的拼图)

所以我查看了 gbuffer 内容,使用 float 纹理格式的 Position 缓冲区似乎 NOT 抗锯齿。但是使用 unsigned byte 纹理格式的 Albedo 缓冲区看起来不错。

下面是这些缓冲区的样子,上面的是 Position 缓冲区,下面的是 Albedo 缓冲区

有人可以解释一下吗?我做错了什么吗?

I create a framebuffer with mutlisample texture attachments to draw on and a framebuffer with normal texture attachments for copying result.

这是你的问题;这实际上行不通。

在你的光照通道之前进行多重采样解析是没有意义的。您有效地混合了 不同对象 上的两个位置。这不会产生有意义的结果。

如果您要在延迟渲染中进行多重采样,则必须使用 per-sample shading in the fragment shader and read each sample (with texelFetch on sampler2DMS) 来进行光照传递。您还将写入多样本图像。

只有最后一张图像是对其进行多重采样解析操作的图像。