Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl GLSL 330中的多采样和片段着色器_Opengl_Glsl_Multisampling - Fatal编程技术网

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

Opengl GLSL 330中的多采样和片段着色器,opengl,glsl,multisampling,Opengl,Glsl,Multisampling,我试图理解在多采样渲染期间如何调用片段着色器,我仔细阅读了规范,但我有点困惑 我设置了一个带有颜色和深度/模具渲染缓冲区的多采样FBO。。好的 我只为变换设置了一个简单的单线顶点着色器,另一个单线片段着色器只返回黑色。。很好 我画了一条线-线被平滑显示。。好的 现在,如果在片段着色器中,不是无声地返回黑色,而是从多采样纹理进行texelFetch,始终读取样本号0(即黑色),我会得到一条锯齿线 简单的myoutcolor=vec4(0.0)和myoutcolor=texelFetch(mysam

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

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

我只为变换设置了一个简单的单线顶点着色器,另一个单线片段着色器只返回黑色。。很好

我画了一条线-线被平滑显示。。好的

现在,如果在片段着色器中,不是无声地返回黑色,而是从多采样纹理进行texelFetch,始终读取样本号0(即黑色),我会得到一条锯齿线

简单的myoutcolor=vec4(0.0)和myoutcolor=texelFetch(mysampler2DMS,…,0)之间有什么区别

规范规定,仅当片段着色器静态使用
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,您是否怀疑驱动程序有问题?我想我应该得到平滑的结果,你同意吗?已确认的驱动程序问题-问题没有显示在不同的拱/驱动程序/硬件组合上