2012-03-25 5 views
1

У меня есть этот код:Open GL ES 2.0 - glGetAttribLocation возвращение -1

@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, и я не получаю никакого вывода чертежа на экране. Как это исправить? Благодарю.

ответ

7

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

gl_Position = uMVPMatrix * uTMatrix * aPosition; 
+0

Спасибо! я случайно написал gl_Position вместо aPosition. – saarraz1

Смежные вопросы