Opengl GLSL 330中的多采样和片段着色器
我试图理解在多采样渲染期间如何调用片段着色器,我仔细阅读了规范,但我有点困惑 我设置了一个带有颜色和深度/模具渲染缓冲区的多采样FBO。。好的 我只为变换设置了一个简单的单线顶点着色器,另一个单线片段着色器只返回黑色。。很好 我画了一条线-线被平滑显示。。好的 现在,如果在片段着色器中,不是无声地返回黑色,而是从多采样纹理进行texelFetch,始终读取样本号0(即黑色),我会得到一条锯齿线 简单的myoutcolor=vec4(0.0)和myoutcolor=texelFetch(mysampler2DMS,…,0)之间有什么区别 规范规定,仅当片段着色器静态使用Opengl GLSL 330中的多采样和片段着色器,opengl,glsl,multisampling,Opengl,Glsl,Multisampling,我试图理解在多采样渲染期间如何调用片段着色器,我仔细阅读了规范,但我有点困惑 我设置了一个带有颜色和深度/模具渲染缓冲区的多采样FBO。。好的 我只为变换设置了一个简单的单线顶点着色器,另一个单线片段着色器只返回黑色。。很好 我画了一条线-线被平滑显示。。好的 现在,如果在片段着色器中,不是无声地返回黑色,而是从多采样纹理进行texelFetch,始终读取样本号0(即黑色),我会得到一条锯齿线 简单的myoutcolor=vec4(0.0)和myoutcolor=texelFetch(mysam
gl_SampleID
,gl_Samplemask[]
,或具有“sample”存储限定符时,才会在样本级别执行片段着色器。。(在所有这些情况下,这意味着GLSL#version 400
或更高版本),否则它将在片段级别执行
但这怎么可能呢?在上面的例子中,我得到了一条平滑的线,即使我总是返回相同的颜色,所以我认为片段着色器总是在多采样帧缓冲区中的采样级别执行。。另一方面,如果不是这样,我应该得到平滑的结果,即使总是从MS纹理返回相同的样本
有人能帮我弄清楚吗
PS:Im当前使用的是#版本330,但我发现每个多采样感知语句Id都需要正确处理MS(gl#u SampleID
,gl#u Samplemask[]
,sample..)仅在GLSL 400或更高版本中受支持。。那么,GLSL 330为正确处理多采样提供了什么支持呢?如何处理GLSL 330中的MS纹理
在上面的例子中,我得到了一条平滑的线,即使我总是返回相同的颜色
因为这就是多重采样
多重采样是指每像素调用一次FS,并将该值分布在原语覆盖的像素区域内的样本上。因此,如果对原语边缘的像素执行FS,则结果将仅分布到该像素的部分样本。您正在运行的图形卡和驱动程序版本是什么?OpenSUSE x64 12.1上的GT330M,驱动程序290.xdriver(刚刚选中)290.10,您是否怀疑驱动程序有问题?我想我应该得到平滑的结果,你同意吗?已确认的驱动程序问题-问题没有显示在不同的拱/驱动程序/硬件组合上