GLSL:无法找到兼容的重载功能

时间:2014-03-21 11:22:02

标签: glsl

我正在尝试编写一个片段着色器而且我已经撞墙了。这只是我的第二个着色器,所以我对此非常陌生,我几乎可以肯定我只是没有正确处理数据类型,这就是错误的来源,但对于我的生活我似乎无法忍受要解决这个问题。目标是能够将纹理传递给函数,以便我可以一次又一次地调用它...任何和所有的帮助将不胜感激!

我得到的错误是:错误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);
}

1 个答案:

答案 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快速参考卡总是有帮助的,您可以快速浏览可用的功能: