我可以使用OpenGL计算着色器来解析多样本纹理吗?

我可以使用OpenGL计算着色器来解析多样本纹理吗?,opengl,shader,texture-mapping,render-to-texture,multisampling,Opengl,Shader,Texture Mapping,Render To Texture,Multisampling,我的应用程序将第一个场景渲染为绑定到FBO的纹理,然后计算着色器对纹理图像进行一些处理,并将其写入另一个纹理,然后我使用该纹理渲染第二个场景。都很好 现在,我希望对第一个场景进行抗锯齿处理,因此我创建了一个多采样纹理,并在渲染之前将其绑定到FBO。在compute着色器中,我使用imageLoad(buf,pos,sample)读取image2DMS(而不是imageLoad(buf,pos)读取image2D)中的所有样本并计算片段的平均值,但看起来所有样本都具有相同的值 在我提取相关的代码并

我的应用程序将第一个场景渲染为绑定到FBO的纹理,然后计算着色器对纹理图像进行一些处理,并将其写入另一个纹理,然后我使用该纹理渲染第二个场景。都很好

现在,我希望对第一个场景进行抗锯齿处理,因此我创建了一个多采样纹理,并在渲染之前将其绑定到FBO。在compute着色器中,我使用
imageLoad(buf,pos,sample)
读取
image2DMS
(而不是
imageLoad(buf,pos)
读取
image2D
)中的所有样本并计算片段的平均值,但看起来所有样本都具有相同的值


在我提取相关的代码并将它们组合到一个简单的测试程序中之前,我想知道我是否理解多样本模型,以及我试图做的事情是否可行。我一直在使用Windows 7中的OpenGL 4.3运行nVidia GTX 660,驱动程序9.18.13.4052,2014年7月。

我认为您应该查找多采样(MSAA)和超级采样(SSAA)之间的差异

多重采样使用可变采样深度和颜色目标。栅格化几何图元后,将根据确定其覆盖范围的所有样本对其进行检查。之后,每个像素只调用一次片段着色器,并将结果复制到每个覆盖的样本。因此,只有一个片段着色器实例在运行,其中基本体覆盖像素内的所有采样。另一方面,当基本体仅覆盖像素的一小部分时,仅复制该样本的片段着色器颜色。因此,您可以在一个像素中采集n个不同的颜色样本,仅当基本体覆盖该像素中的特定样本时

超级采样更容易理解,需要更多的计算能力。超级采样为每个采样调用一个片段着色器实例。因此,即使相同的基本体覆盖同一像素中的所有采样,也会得到不同的颜色

在OpenGL中,您可以使用glMinSampleShading选项从MSAA无缝移动到SSAA。此设置描述至少每个像素必须执行多少个片段着色器实例。该值是样本数的一个因子(0.0-1.0)。因此,如果您选择1.0的因子,您将获得超级采样

由于MSAA只涉及基于不同原语的附加片段着色实例,因此可以将其视为纯粹基于几何体的AA。因此,例如,基于alpha纹理的混叠无法解决。这就是为什么一些网站将glMinSampleShading选项也称为MSAA的透明度示例的原因

我建议您对AA概述进行详细描述和说明,以便进一步阅读:

您好,请对代码使用引号:`code`@ArnonZilca,您可以随时编辑有文本格式问题的问题;)是的,但是我会错过关于教育价值的话题我在复习这个问题。