我试图了解在多重采样渲染期间如何调用片段着色器,我仔细阅读了规范但我有点困惑..
我设置了一个带有颜色和深度/模板渲染缓冲区的多重采样 FBO .. 很好
我设置了一个简单的 1 线顶点着色器仅用于变换和另一个 1 线片段着色器,它只返回黑色.. 它很好
我画了一条线 - 这条线显示平滑..很好
现在,如果在片段着色器中,我不是笨拙地返回黑色,而是从多重采样纹理中提取纹理,总是读取样本编号 0(即黑色),我得到一条锯齿线..
a simplemyoutcolor=vec4(0.0)
和 a 和有什么不一样myoutcolor=texelFetch(mysampler2DMS,...,0)
?
规范规定片段着色器仅在静态使用gl_SampleID
,gl_Samplemask[]
或具有“示例”存储限定符时在样本级别执行。(在所有这些情况下,这意味着 GLSL#version 400
或更高版本),否则它将在片段级别执行。 .
但那怎么可能呢?在上面的例子中,即使我总是返回相同的颜色,我也得到了一条平滑线,所以我认为片段着色器总是在多采样帧缓冲区中的样本级别执行。另一方面,如果不是这样,我即使始终从 MS 纹理返回相同的样本,也应该得到平滑的结果。
有人可以帮我解决这个问题吗?
PS:我目前使用#version 330,但我发现每个multisampling-aware statement Id需要正确处理MS(gl_SampleID
,,gl_Samplemask[]
sample..)仅在GLSL 400或更高版本中受支持..所以,究竟是什么支持GLSL 330提供正确处理多重采样?如何在 GLSL 330 中处理 MS 纹理?