2013-04-30 26 views

Trả lời

8

Có vẻ như bạn cần vị trí chỉ định giá trị cho đồng phục và bạn cần chỉ mục để truy vấn thông tin về đồng phục.

Vâng, đó là sự khác biệt giữa hai loại.

Tại sao cần có hai giá trị?

Đừng cho rằng bất kỳ điều gì mà API OpenGL dựa hoàn toàn vào "nhu cầu". Đôi khi nó chỉ là "chúng tôi đã ngu ngốc" hoặc "đây là một ý tưởng tốt tại một thời điểm, nhưng bây giờ nó không có ý nghĩa nữa."

Vị trí thống nhất thường rơi vào phần sau.

Ý tưởng ban đầu, quay trở lại đề xuất GLSL ban đầu của 3D Labs, là các vị trí thống nhất có thể đại diện cho một số loại bù đắp byte. Vị trí đó là số có ý nghĩa đại diện cho một vị trí thực tế cho nơi bộ nhớ của bộ đồng phục. Do đó, việc thực hiện sẽ không phải sử dụng một bảng tra cứu để chuyển đổi một số tùy ý thành một bù đắp byte trong đó bộ nhớ thực tế là. Vị trí sẽ là bù đắp byte hoặc bất kỳ dữ liệu nào khác là cần thiết.

Tuy nhiên, ngoại trừ khả năng triển khai GLSL của chính 3D Labs, điều này chưa bao giờ thực sự được triển khai bằng cách triển khai. Vị trí thống nhất hầu như luôn là chỉ số thứ hai của chỉ mục và các cuộc gọi glUniform sẽ hiển thị chúng trong bảng.

Đây là lý do tại sao chúng tôi hiện có khả năng explicitly specify uniform locations. Đó là cơ bản ARB nói, "chúng ta bỏ cuộc, bây giờ họ là chỉ số". Nhưng họ không thể thay đổi các API cũ có sự phân biệt, vì vậy họ phải duy trì hai cách riêng biệt để nói về đồng phục.

Và họ thực sự không muốn. Giữ sự khác biệt làm cho the query APIs dễ sử dụng hơn, ở một số khía cạnh. Các chỉ số thống nhất có sẵn là tất cả các chỉ số từ 0 đến một số số liệu có thể đếm được (GL_ACTIVE_UNIFORMS). Một khi bạn có thể xác định vị trí đồng nhất một cách rõ ràng, sự phân đôi trở nên hữu ích bởi vì các chỉ số vẫn chỉ là một số đếm được các số độc lập với vị trí.

Bằng cách đó, API không phải có truy vấn "nhận tất cả các vị trí thống nhất có sẵn". Bạn chỉ cần truy vấn đếm, và sau đó thực hiện một vòng lặp từ 0 đến số đó để truy vấn thông tin. Người dùng dễ dàng hơn và việc triển khai dễ dàng hơn.

+0

Có thể lấy chỉ mục theo tên đồng nhất, giống như bạn làm với các vị trí thống nhất hay là những gì bạn mô tả trong đoạn cuối là cách duy nhất để có được các chỉ mục? –

+0

@DanWebster: Có, bạn có thể [nhận chỉ số theo tên.] (Http://www.opengl.org/wiki/GLAPI/glGetUniformIndices) Thông thường, loại nội dung bạn truy vấn theo chỉ mục là loại nội dung bạn đã biết nếu bạn có một cái tên. Nhưng bạn có thể làm điều đó. –

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