Đây có thể là câu hỏi noob. Như tôi đã hiểu, glBindAttribLocation (..., AAA, ...) sẽ liên kết một thuộc tính trong chương trình với ID vị trí của AAA, miễn là AAA là duy nhất. Nếu tôi có đoạn mã sau:GLES2 Là glBindAttribLocation() Cần thiết?
glBindAttribLocation(..., 0, "XXX");
glBindAttribLocation(..., 1, "YYY");
này sẽ ràng buộc hai biến tôi đến vị trí ID 0 và 1. Sau đó tôi sẽ gọi:
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);
Tính đến thời điểm này, tôi hiểu rằng các ID của 0 và 1 được chuyển vào glVertexAttribPointer() làm tham số đầu tiên. Có thể an toàn để giả định rằng nếu tôi nhận được ID vị trí của các thuộc tính (như trên) thông qua các cuộc gọi glGetAttribLocation(), sao cho các ID được trả lại là 5 và 6 thay vì 0 và 1, tôi có thể vượt qua 5 và không 6 vào glVertexAttribPointer() và glEnableVertexAttribArray() thay vì 0 và 1 ??