2011-11-22 40 views
6

Trong GLSL-ES, có thể có mảng. Ví dụ: GLSL ES Specification cung cấp ví dụ sau về biến thống nhất là một mảng:Có thể cho thuộc tính đỉnh là một mảng trong GLSL-ES 2.0 không?

uniform vec4 lightPosition[4]; 

Có thể có thuộc tính đỉnh là mảng không? Nói cách khác, liệu pháp lý sau đây có phù hợp với thông số kỹ thuật không?

attribute vec4 foo[3]; // three vec4s per vertex 

Câu trả lời (có hoặc không) được đề cập rõ ràng ở bất kỳ đâu trong Đặc tả kỹ thuật ES GLSL? (Tôi không thể tìm thấy nó, nhưng tôi chưa đọc từng dòng thông số.)

Ngoài ra, nếu nó hợp pháp, làm cách nào để khởi tạo thuộc tính như vậy bằng API OpenGL ES 2.0? (Giả sử glVertexAttribPointer sẽ được sử dụng, bố trí các đỉnh/phần tử mảng/phần tử vector là gì?)

Trả lời

10

GLSL ES 2.0 specification tuyên bố rằng các thuộc tính không thể được khai báo thành mảng.

Trong máy tính để bàn GL, bạn có thể có các mảng thuộc tính. Khi thuộc tính được chỉ định một chỉ mục thuộc tính (với glBindAttribLocation hoặc tự động bởi trình đổ bóng được liên kết), nó sẽ nhận được các thuộc tính liên tiếp, bắt đầu từ thuộc tính bạn đã yêu cầu nếu bạn sử dụng glBindAttribLocation. Vì vậy, nếu foo được trao vị trí 5, foo[0] sẽ là 5, foo[1] sẽ là 6, và foo[2] sẽ là 7.

Nếu có một số phần mở rộng ES 2.0 cho phép các mảng thuộc tính, nó có khả năng sẽ làm việc như thế này.

+0

Đặc điểm kỹ thuật ở đâu nói rằng chúng không thể được khai báo là mảng? –

+2

@LaurenceGonsalves: Phần 4.3.3, đủ tiêu chuẩn đáng ngạc nhiên, "Thuộc tính". Đó là câu cuối cùng của đoạn đầu tiên. –

+1

@NicolBolas; Trên máy tính để bàn nó trở thành hợp pháp để sử dụng các thuộc tính mảng trong phiên bản 1.5 (GL 3.2), vì vậy nó khá mới ở đó là tốt. – falstro

Các vấn đề liên quan