GLSL:找不到兼容的重载函数
我试图写一个碎片着色器,但我碰到了一堵墙。这只是我的第二个着色器,所以我对它非常陌生,我几乎可以肯定,我只是没有正确处理数据类型,这就是错误的来源,但对于我来说,我似乎无法修复它。目标是能够将纹理传递给函数,以便我可以一次又一次地调用它。。。任何和所有的帮助将不胜感激 我得到的错误是:错误C1115:找不到兼容的重载函数“texture2D(vec3,vec2)”GLSL:找不到兼容的重载函数,glsl,Glsl,我试图写一个碎片着色器,但我碰到了一堵墙。这只是我的第二个着色器,所以我对它非常陌生,我几乎可以肯定,我只是没有正确处理数据类型,这就是错误的来源,但对于我来说,我似乎无法修复它。目标是能够将纹理传递给函数,以便我可以一次又一次地调用它。。。任何和所有的帮助将不胜感激 我得到的错误是:错误C1115:找不到兼容的重载函数“texture2D(vec3,vec2)” 正如错误消息告诉您的那样,没有任何texture2D重载要求将vec3作为第一个参数,将vec2作为第二个参数。texture2D的
正如错误消息告诉您的那样,没有任何
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版本总是很有帮助的,在该卡中,您将对可用功能进行快速概述:
pass1
是vec4
而不是sampler2D
。当你想做高斯模糊时,你还需要做两次模糊,第一次是水平模糊,然后是垂直模糊,或者相反。我也这么想,谢谢。也许我让自己在一个着色器中完成两个过程变得更加困难。我想那根本不可能。我的逻辑是,我先做水平模糊,然后垂直模糊,然后在水平方向上运行,然后再垂直方向运行,以获得更平滑的结果。我的想法完全错了吗?