我有以下代码:
@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并且在屏幕上没有图形输出。
我该如何解决?谢谢。
最佳答案
着色器代码中未使用“ aPosition”,因此GLSL编译器已优化掉了变量。尝试在gl_Position分配中使用它,您会注意到它有效。
gl_Position = uMVPMatrix * uTMatrix * aPosition;
关于android - OPEN GL ES 2.0-glGetAttribLocation返回-1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9861351/