Tôi giả định đây sẽ là một trong những thứ "không xác định", nhưng dường như tôi không tìm được câu trả lời cụ thể từ google.Giá trị mặc định OpenGL cho thuộc tính đỉnh không bị chặn khi sử dụng vòng loại bố cục
Hãy nói rằng trong vertex shader của tôi, tôi có:
layout(location = 0) in vec3 vPosition;
layout(location = 1) in vec3 vNormal;
layout(location = 2) in vec4 vColour;
Nhưng không có gì đệm vào vị trí 2 với glEnableVertexAttribArray() hoặc glVertexAttribPointer() là. Tôi có thể mong đợi giá trị là gì đặc biệt không?
Tôi đã giả định vec4 rằng nó sẽ nằm dọc theo các dòng {0,0,0,0}, {0,0,0,1} hoặc {1,1,1,1}, nhưng trong trường hợp của tôi là {0,0,1,1}.
Khi trước đây tôi sử dụng glBindAttribLocation() để xác định vị trí, nó được mặc định là {1,1,1,1} trên 4 máy khác nhau sử dụng 3 hệ điều hành khác nhau (ubuntu 12.04, windows 7 và ubuntu 10.04).
Có an toàn để giả định giá trị sẽ là {0,0,1,1} trên các máy không? hay chỉ đơn giản là trùng hợp ngẫu nhiên?
Vì vậy, tôi đã đặt glDisableVertexAttribArray() cho số vị trí cụ thể, nhưng nó vẫn được đọc trong trình đổ bóng là {0,0,1,1}. Tôi đang sử dụng VAO, vì vậy tôi chỉ thực hiện cuộc gọi một lần. Tôi có nên tắt chúng ngay trước khi tôi gọi hàm glDrawElements() thay thế không? – kbirk
@Pondwater: Nếu VAO vô hiệu hóa nó, sau đó nó bị vô hiệu hóa. Bạn không phải tắt nó nữa. Ngoài ra, tôi đã thực hiện một phụ lục cho câu trả lời. –
Ahh có ý nghĩa! Cảm ơn bạn đã làm rõ! – kbirk