我正在尝试编写一个片段着色器而且我已经撞墙了。这只是我的第二个着色器,所以我对此非常陌生,我几乎可以肯定我只是没有正确处理数据类型,这就是错误的来源,但对于我的生活我似乎无法忍受要解决这个问题。目标是能够将纹理传递给函数,以便我可以一次又一次地调用它...任何和所有的帮助将不胜感激!
我得到的错误是:错误C1115:无法找到兼容的重载函数“texture2D(vec3,vec2)”。
uniform sampler2D image;
uniform float radius;
uniform float adsk_result_w, adsk_result_h;
vec2 iResolution = vec2(adsk_result_w, adsk_result_h);
vec2 uv=(gl_FragCoord.xy/iResolution.xy);
vec2 vTexCoord = (gl_FragCoord.xy/iResolution.xy);
float blurSize = radius/iResolution;
vec4 hblur(vec4 frontin ) {
vec3 RTScene = frontin.rgb;
vec4 sum = vec4(0.0);
sum += texture2D(RTScene, vec2(vTexCoord.x - 4.0*blurSize, vTexCoord.y)) * 0.05;
sum += texture2D(RTScene, vec2(vTexCoord.x - 3.0*blurSize, vTexCoord.y)) * 0.09;
sum += texture2D(RTScene, vec2(vTexCoord.x - 2.0*blurSize, vTexCoord.y)) * 0.12;
sum += texture2D(RTScene, vec2(vTexCoord.x - blurSize, vTexCoord.y)) * 0.15;
sum += texture2D(RTScene, vec2(vTexCoord.x, vTexCoord.y)) * 0.16;
sum += texture2D(RTScene, vec2(vTexCoord.x + blurSize, vTexCoord.y)) * 0.15;
sum += texture2D(RTScene, vec2(vTexCoord.x + 2.0*blurSize, vTexCoord.y)) * 0.12;
sum += texture2D(RTScene, vec2(vTexCoord.x + 3.0*blurSize, vTexCoord.y)) * 0.09;
sum += texture2D(RTScene, vec2(vTexCoord.x + 4.0*blurSize, vTexCoord.y)) * 0.05;
return vec4(sum);
}
void main() {
vec4 front = texture2D(image, uv);
vec4 work = hblur(front);
gl_FragColor = vec4(work);
}
答案 0 :(得分:2)
由于错误消息告诉您没有texture2D
重载,需要vec3
作为第一个参数,vec2
作为第二个参数。 texture2D
的第一个参数必须是sampler2D
类型的一个。
从字面上讲,您使用texture2D(RTScene, vec2(vTexCoord.x, vTexCoord.y))
在代码中告诉OpenGL,以查找纹理vec2(vTexCoord.x, vTexCoord.y)
中位置RTScene
的颜色。但由于RTScene
只是包含三个浮点数的vec3
(您在main
中检索到的rgb值),OpenGL应该在哪里找到像素。
在你的主要代码中,你会有这样的东西:
vec4 work = hblur(image, uv);
你的hblur
应该是这样的:
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快速参考卡总是有帮助的,您可以快速浏览可用的功能: