'texture2D':在OpenGL ES2中找不到匹配的重载函数?

9
我正在处理一个项目,为此我需要阅读一本名为“OpenGL ES 2 For Android: A quick start guide”的书。当我到达纹理部分时,出现了以下错误:
'texture2D' : No matching overloaded function found

当我编译着色器时。

着色器代码:

// Fragment shader
precision mediump float;

uniform sampler2D u_TextureUnit;
varying vec4 v_TextureCoordinates;

void main()
{
    gl_FragColor = texture2D(u_TextureUnit, v_TextureCoordinates);
}

// Vertex shader
uniform mat4 u_Matrix;
attribute vec4 a_Position;
attribute vec4 a_TextureCoordinates;

varying vec4 v_TextureCoordinates;

void main()
{
    gl_Position = u_Matrix * a_Position;
    v_TextureCoordinates = a_TextureCoordinates;
}

我尝试将书上的同样的着色器代码应用到我的项目中,但在编译着色器时仍然出现了相同的错误,在 Android 设备上的视口也是空白的,只显示了我设置的清除颜色。

1个回答

11
varying vec4 v_TextureCoordinates;
        ^^^^

在ES 2.0中,texture2D()有且仅有两个重载:

vec4 texture2D(sampler2D sampler, vec2 coord)
vec4 texture2D(sampler2D sampler, vec2 coord, float bias)

它们都不接受vec4作为coord参数。

使用切片方法通过交换来获取v_TextureCoordinates的最后两个向量组件:

gl_FragColor = texture2D(u_TextureUnit, v_TextureCoordinates.xy );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接