GLSL 330中的多重采样和片段着色器

时间:2012-01-12 16:12:38

标签: opengl glsl multisampling

我试图理解在多重采样渲染过程中如何调用片段着色器,我仔细阅读了规范,但我有点困惑..

我设置了一个带有颜色和深度/模板渲染缓冲区的多重采样FBO ..很好

我设置了一个简单的1行顶点着色器,仅用于变换和另一个1行片段着色器,它只返回一个黑色..并且很好

我画了一条线 - 线条显示得很平滑..很好

现在,如果在片段着色器中,而不是愚蠢地返回黑色,我从多重采样纹理中获取texelFetch,总是读取样本编号0(即黑色),我得到锯齿状的线条。

简单myoutcolor=vec4(0.0)myoutcolor=texelFetch(mysampler2DMS,...,0)之间的区别是什么?

规范声明片段着色器仅在静态使用gl_SampleIDgl_Samplemask[]或具有"样本"时才在样本级执行。存储限定符..(在所有这些情况下,这意味着GLSL #version 400或更高版本),否则它将在片段级别执行..

但怎么会这样?在上面的例子中,我得到了一条平滑的线,即使我总是返回相同的颜色,所以我认为片段着色器总是在多重采样帧缓冲器中的样本级执行..另一方面,如果不是这样,我即使从MS纹理返回相同的样本,也应该得到平滑的结果。

有人可以帮我解决这个问题吗?

PS:我目前正在使用#version 330,但我发现每个多重采样感知语句ID都需要正确处理MS(gl_SampleIDgl_Samplemask[],sample ..)仅在GLSL 400中受支持或者以上..那么,GLSL 330正是为了正确处理多重采样而提供的支持是什么?如何在GLSL 330中处理MS纹理?

0 个答案:

没有答案