Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

'texture2D' : No matching overloaded function found OpenGL ES2?

I was working on a project, and for that project I had to walk through a book called "OpenGL ES 2 For Android: A quick start guide". So when I got to texturing, I got the error of:

'texture2D' : No matching overloaded function found

When I compile the shader. The shader code:

// 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;
}

I tried the same shaders for my project and for exactly the same code as in the book but it still gives me the same error when I compile the shader, and the viewport on the android device is blank, just the clear color I set is shown.

like image 919
LessComplexity Avatar asked Jun 20 '14 21:06

LessComplexity


1 Answers

varying vec4 v_TextureCoordinates;
        ^^^^

There are exactly two texture2D() overloads in ES 2.0:

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

...neither of which accept a vec4 for coord.

Slice off the last two vector components of v_TextureCoordinates using a swizzle:

gl_FragColor = texture2D(u_TextureUnit, v_TextureCoordinates.xy );
like image 97
genpfault Avatar answered Nov 16 '22 11:11

genpfault