GLSL:找不到兼容的重载函数

GLSL:找不到兼容的重载函数,glsl,Glsl,我试图写一个碎片着色器,但我碰到了一堵墙。这只是我的第二个着色器,所以我对它非常陌生,我几乎可以肯定,我只是没有正确处理数据类型,这就是错误的来源,但对于我来说,我似乎无法修复它。目标是能够将纹理传递给函数,以便我可以一次又一次地调用它。。。任何和所有的帮助将不胜感激 我得到的错误是:错误C1115:找不到兼容的重载函数“texture2D(vec3,vec2)” 正如错误消息告诉您的那样,没有任何texture2D重载要求将vec3作为第一个参数,将vec2作为第二个参数。texture2D的

我试图写一个碎片着色器,但我碰到了一堵墙。这只是我的第二个着色器,所以我对它非常陌生,我几乎可以肯定,我只是没有正确处理数据类型,这就是错误的来源,但对于我来说,我似乎无法修复它。目标是能够将纹理传递给函数,以便我可以一次又一次地调用它。。。任何和所有的帮助将不胜感激

我得到的错误是:错误C1115:找不到兼容的重载函数“texture2D(vec3,vec2)”


正如错误消息告诉您的那样,没有任何
texture2D
重载要求将
vec3
作为第一个参数,将
vec2
作为第二个参数。
texture2D
的第一个参数必须是
sampler2D
类型的

从字面上讲,您可以使用
texture2D(RTScene,vec2(vTexCoord.x,vTexCoord.y))
在代码中告诉OpenGL在纹理
RTScene
中的
vec2(vTexCoord.x,vTexCoord.y)
位置查找颜色。但是由于
RTScene
只是一个包含三个浮动的
vec3
(在
main
中检索到的rgb值),OpenGL应该在哪里找到像素

在主代码中,您将有如下内容:

vec4 work = hblur(image, uv);
vec4 hblur(sampler2D tex, vec2 uv) {
    // your other code
    sum += texture2D(tex, vec2(uv.x - 4.0*blurSize, uv.y)) * 0.05;
    // your other code
}
您的
hblur
应该如下所示:

vec4 work = hblur(image, uv);
vec4 hblur(sampler2D tex, vec2 uv) {
    // your other code
    sum += texture2D(tex, vec2(uv.x - 4.0*blurSize, uv.y)) * 0.05;
    // your other code
}
查看OpenGL快速参考卡以了解您正在编写代码的OpenGL版本总是很有帮助的,在该卡中,您将对可用功能进行快速概述:


非常感谢!当我将“sample2D”改为“sample2D”时,这就成功了。非常感谢@是的,很抱歉打错了。我已经改正了。我还有最后一个问题。当我尝试将结果传递给另一个相同的函数时,但是对于垂直传递,我得到了一个关于不兼容类型的参数“tex”的错误。我试图做以下工作:vec4 pass1=hblur(image,uv);vec4 pass2=vblur(pass1,uv)@因为
pass1
vec4
而不是
sampler2D
。当你想做高斯模糊时,你还需要做两次模糊,第一次是水平模糊,然后是垂直模糊,或者相反。我也这么想,谢谢。也许我让自己在一个着色器中完成两个过程变得更加困难。我想那根本不可能。我的逻辑是,我先做水平模糊,然后垂直模糊,然后在水平方向上运行,然后再垂直方向运行,以获得更平滑的结果。我的想法完全错了吗?