我当时正在从事一个项目,对于该项目,我必须阅读一本名为“OpenGL ES 2 For Android:快速入门指南”的书。
所以当我要进行纹理处理时,出现了以下错误:

'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设备上的视口(viewport)为空白,仅显示了我设置的透明颜色。

最佳答案

varying vec4 v_TextureCoordinates;
        ^^^^

ES 2.0中有两种texture2D()重载:
vec4 texture2D(sampler2D sampler, vec2 coord)
vec4 texture2D(sampler2D sampler, vec2 coord, float bias)

...都不接受vec4coord

使用毛刷切掉v_TextureCoordinates的最后两个 vector 分量:
gl_FragColor = texture2D(u_TextureUnit, v_TextureCoordinates.xy );

10-07 21:25