OPEN GL ES 2.0 - glGetAttribLocation возвращает -1 - PullRequest
1 голос
/ 25 марта 2012

У меня есть этот код:

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    GLES20.glClearColor(0, 0, 0, 1.0f);

    int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER,
            getVertexShader());
    int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER,
            getFragmentShader());
    mProgram = GLES20.glCreateProgram();
    GLES20.glAttachShader(mProgram, vertexShader);
    GLES20.glAttachShader(mProgram, fragmentShader);
    GLES20.glLinkProgram(mProgram);

    Matrix.setIdentityM(mMMatrix, 0);

    **maPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");**

}

и после отмеченной строки maPositionHandle почему-то равен -1.

Вот мой вершинный шейдер:

uniform mat4 uTMatrix;
uniform mat4 uMVPMatrix;
attribute vec4 aPosition;
attribute vec2 aTextureCoord;
varying vec2 vTextureCoord;

void main() {
    gl_Position = uMVPMatrix * uTMatrix * gl_Position;
    vTextureCoord = aTextureCoord;
}

Как вы можете видеть, есть атрибут с именем aPosition, но я получаю -1, и я не получаю вывод рисунка на экран.Как это исправить?спасибо.

1 Ответ

7 голосов
/ 25 марта 2012

«aPosition» не используется в коде шейдера, поэтому GLSL-компилятор оптимизировал переменную.Попробуйте использовать его в назначении gl_Position, и вы заметите, что он работает.

gl_Position = uMVPMatrix * uTMatrix * aPosition;
...