Tôi có cần buộc lại đồng phục hoặc thuộc tính khi thay đổi chương trình đổ bóng không?


11

Kết xuất cảnh thường liên quan đến nhiều hơn một chương trình đổ bóng, trong trường hợp của tôi, tất cả đều sử dụng cùng một thuộc tính và chia sẻ ít nhất một số đồng phục. Để chúng hoạt động bình thường, tôi hiện đang chơi an toàn, nghĩa là tôi sắp xếp lại các thuộc tính và nhận vị trí thống nhất phù hợp mỗi khi tôi chuyển đổi giữa các chương trình đổ bóng. Vì vậy, về cơ bản nhiều lần trong mỗi khung hình, có lẽ không phải là cách tiếp cận tốt nhất.

Vì vậy, nó (nói chung) có cần thiết để rebind các thuộc tính và đồng phục sau khi chuyển đổi chương trình shader không? Và tại sao?

Nếu vậy, có cách nào để thực hiện việc này một lần khi bắt đầu chương trình và không bao giờ phải chạm vào chúng nữa (ngoại trừ cài đặt các giá trị thống nhất) không?

Câu trả lời:


12

Bạn không cần phải buộc lại các thuộc tính, miễn là bạn đảm bảo rằng vị trí của chúng giữ nguyên trong cả hai shader. (Thường sử dụng layout(location = X)cú pháp trong GLSL, nhưng cũng có thể được thực hiện glBindAttribLocationnếu trước đây không có sẵn.)

Đồng phục, tuy nhiên, là một phần của trạng thái Shader Object, và do đó sẽ cần phải được đặt ít nhất một lần cho mỗi shader. Một cách để giảm thiểu chi phí cho việc này là sử dụng Đối tượng bộ đệm thống nhất , sẽ chứa tất cả các giá trị thống nhất của bạn và sau đó có thể được liên kết với một shader chỉ với một cuộc gọi.


Trên liên kết UBO của bạn: "Cuối cùng, chúng có thể được sử dụng để chia sẻ thông tin giữa các chương trình khác nhau. Vì vậy, sửa đổi một bộ đệm duy nhất có thể cho phép cập nhật đồng phục trong nhiều chương trình một cách hiệu quả."
Zouch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.