2012-03-25 125 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出於某種原因。

這裏是我的VERT着色器:

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

你可以看到,有一個名爲。負責的屬性,但我得-1和我在屏幕上得到無拉絲輸出。 我該如何解決這個問題?謝謝。

回答

7

「aPosition」在着色器代碼中未使用,因此GLSL編譯器已對該變量進行了優化。嘗試在gl_Position分配中使用它,你會注意到它的工作原理。

gl_Position = uMVPMatrix * uTMatrix * aPosition; 
+0

謝謝!我不小心寫了gl_Position而不是aPosition。 – saarraz1 2012-03-25 15:32:22