OPEN GL ES 2.0 - glGetAttribLocation返回-1

saa*_*az1 1 android opengl-es glsl opengl-es-2.0

我有这个代码:

@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");**

}
Run Code Online (Sandbox Code Playgroud)

在标记的行之后,由于某种原因,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;
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,有一个名为aPosition的属性,但我得到了-1,我在屏幕上没有得到绘图输出.我该如何解决?谢谢.

Vil*_*nde 7

着色器代码中未使用"aPosition",因此GLSL编译器已优化掉变量.尝试在gl_Position任务中使用它,你会发现它有效.

gl_Position = uMVPMatrix * uTMatrix * aPosition;
Run Code Online (Sandbox Code Playgroud)