Very basic OpenGL ES 2 error

Posted by user16547 on Game Development See other posts from Game Development or by user16547
Published on 2014-06-04T20:52:14Z Indexed on 2014/06/04 21:45 UTC
Read the original article Hit count: 253

Filed under:
|

This is an incredibly simple shader, yet I'm having a lot of trouble understanding what's wrong with it. I'm trying to send a float to my fragment shader. Its purpose is to adjust the alpha of the fragment colour. Here is my fragment shader:

precision mediump float;

uniform sampler2D u_Texture;
uniform float u_Alpha;

varying vec2 v_TexCoordinate;

void main() {
    gl_FragColor = texture2D(u_Texture, v_TexCoordinate);
    gl_FragColor.a *= u_Alpha;
}

and below is my rendering method. I get a 1282 (invalid operation) on the GLES20.glUniform1f(u_Alpha, alpha); line. alpha is 1 (but I tried other values as well) and transparent is true:

public void render() {
    GLES20.glUseProgram(mProgram);

    if(transparent) {
        GLES20.glEnable(GLES20.GL_BLEND);

        GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);

        GLES20.glUniform1f(u_Alpha, alpha);
    }

    Matrix.setIdentityM(mModelMatrix, 0);
    Matrix.rotateM(mModelMatrix, 0, angle, 0, 0, 1);
    Matrix.translateM(mModelMatrix, 0, x, y, z);
    Matrix.multiplyMM(mMVPMatrix, 0, mViewMatrix, 0, mModelMatrix, 0);


    Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mMVPMatrix, 0);


    GLES20.glUniformMatrix4fv(u_MVPMatrix, 1, false, mMVPMatrix, 0);


    GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vbo[0]);
    GLES20.glVertexAttribPointer(a_Position, 3, GLES20.GL_FLOAT, false, 12, 0);

    GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vbo[1]);
    GLES20.glVertexAttribPointer(a_TexCoordinate, 2, GLES20.GL_FLOAT, false, 8, 0);


    //snowTexture start
    GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle[0]);
    GLES20.glUniform1i(u_Texture, 0);

    GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, ibo[0]);
    GLES20.glDrawElements(GLES20.GL_TRIANGLE_STRIP, indices.capacity(), GLES20.GL_UNSIGNED_BYTE, 0);

    GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
    GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);

    if(transparent) {
        GLES20.glDisable(GLES20.GL_BLEND);
    }

    GLES20.glUseProgram(0);
}

© Game Development or respective owner

Related posts about opengl-es2

Related posts about fragment-shader