这可能是一个菜鸟问题。据我了解,只要AAA是唯一的,glBindAttribLocation(...,AAA,...)将把程序中的一个属性绑定到AAA的位置ID。如果我有下面的代码:GLES2是glBindAttribLocation()必需的吗?
glBindAttribLocation(..., 0, "XXX");
glBindAttribLocation(..., 1, "YYY");
这将结合我的两个变量的位置ID 0和1。我随后致电:
glBindBuffer(GL_ARRAY_BUFFER, VBId);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBId);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 6, 0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 6, (void *) 0 + sizeof(float) * 3);
glEnableVertexAttribArray(1);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
到现在为止,我明白的ID作为第一个参数,将0和1传入glVertexAttribPointer()。
假设如果我通过glGetAttribLocation()调用获得了属性的位置ID(如上所示),使得返回的ID是5和6而不是0和1,我可以安全地通过5和6变成glVertexAttribPointer()和glEnableVertexAttribArray()而不是0和1?