2017-06-19 32 views
0

我有一个使用ARB汇编shader一个NVIDIA例如:ARB大会GLSL

!!ARBfp1.0 
TEX result.color, fragment.texcoord, texture[0], RECT; 
END 

现在,我想它转换成一个GLSL着色器。这是我想出的:

uniform sampler2D tex; 

void main(void) 
{ 
    vec4 col = texture2D (tex, gl_TexCoord[0]); 
    gl_FragColor = vec4(col.r, col.g, col.b, col.a); 
} 

我希望看到没有改变产生的渲染,但可悲的是我只得到一个黑色的纹理。

我已经确保tex采样器设置正确。此外,我的GLSL代码编译没有错误。为了调试,我试图让我的着色器更简单:

void main(void) 
{ 
    gl_FragColor = vec4(1,0,0,1); 
} 

这给了我一个红色的纹理。因此,我的基本设置似乎没问题。

+0

由于汇编程序版本正常工作,纹理创建正确。绑定到采样器也看起来很好(检查调试器中的所有ID)。 tex坐标也应该没问题,因为两个着色器变体(汇编器和GLSL)的绘图代码是完全相同的。有什么办法可以调试着色器中发生了什么? – Boris

+0

是的,使用RenderDoc。它可以让你看到着色器输入,纹理,GL状态,制服等。 – SurvivalMachine

+0

嗯,你有一个2D纹理,但你只传递一个纹理坐标?推测t默认为0.0。如下所述,旧的RECT纹理使用从0到W/H的整数坐标,而不是从0到1浮动。检查这些值? –

回答

1

请注意TEX的第4个参数。它说RECT,所以采样器需要有sampler2DRect类型。

uniform sampler2DRect tex; 

void main(void) { 
    gl_FragColor = texture2DRect(tex, gl_TexCoord[0]); 
}