Tôi đang xem nguồn của ứng dụng OpenGL sử dụng trình đổ bóng. Một trình đổ bóng cụ thể trông giống như sau:Giá trị float không đổi trong trình đổ bóng GLSL - bất kỳ lý do nào để sử dụng đồng phục?
uniform float someConstantValue;
void main()
{
// Use someConstantValue
}
Đồng phục được đặt một lần từ mã và không bao giờ thay đổi trong suốt thời gian chạy ứng dụng.
Trong trường hợp nào tôi muốn khai báo someConstantValue
dưới dạng uniform
và không phải là const float
?
Chỉnh sửa: Chỉ cần làm rõ, giá trị không đổi là hằng số vật lý.
"chênh lệch hiệu suất giữa sử dụng đồng phục hoặc hằng số ** có thể ** không đáng kể" Không tốt để đoán. Khai báo một giá trị không đổi cho phép trình biên dịch GLSL thực hiện các tối ưu hóa nếu không sẽ không thể thực hiện được. Nhưng các trình biên dịch GLSL đáng buồn có xu hướng có lỗi và hành xử theo những cách không thể đoán trước. Vì vậy, một câu trả lời chung thực sự là không thể. Tôi đã gặp phải sự khác biệt về hiệu suất nghiêm trọng giữa việc sử dụng các mảng const và non-const (tùy thuộc vào độ dài của chúng) mặc dù giá trị của chúng sẽ không bao giờ được sửa đổi. Tôi cho rằng đây là lỗi trình biên dịch. – Tara
Mặc dù nhận xét trước đó có khả năng chính xác vào thời điểm đó, loại biên dịch vừa kịp này có thể được mong đợi. Các giá trị thống nhất có thể được tối ưu hóa như thể chúng là hằng số. Xem [this] (https://www.khronos.org/opengl/wiki/Core_Language_ (GLSL) #Dynamically_uniform_expression) để biết thêm thông tin. –