這可能是一個菜鳥問題。據我瞭解,只要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?