Trong HLSL, sự khác biệt giữa các hệ số tĩnh của Hồi giáo và Số #define 'đối với các hằng số là gì?


8

Cho đến nay tôi đã khai báo tất cả các biến không đổi của mình như static consttrong mã HLSL của tôi, nhưng hầu như mọi ví dụ về trình tạo bóng đơn lẻ mà tôi đã sử dụng #definethay thế.

Tôi biết lý do tôi sẽ sử dụng const const trong C ++ qua bộ tiền xử lý và tôi cũng chỉ mang nó vào HLSL. Tuy nhiên, tôi tò mò liệu có bất kỳ tác dụng phụ hay ưu / nhược điểm nào không, ngoài các đối số "tĩnh const so với #define" tiêu chuẩn của C ++.

Câu trả lời:


3

Về cơ bản nó không thành vấn đề.

#definesử dụng dán mã thông báo để chèn giá trị được chỉ định vào mã shader bất cứ nơi nào nó xảy ra; thay vào đó, shader sẽ nhìn thấy mã thông báo như thể bạn đơn giản mã hóa nó mỗi lần xuất hiện.

Một static constbiến trong, trong thực tế, một biến. Cụ thể, đó là một biến được khởi tạo một lần, có giá trị vẫn tồn tại giữa các lệnh gọi hàm và không thể thay đổi. Là một biến, có thể có cùng những thứ mà tất cả các biến khác có thể có: bộ lưu trữ bổ sung và bộ xác định loại ( precise), loại phức tạp hơn (như float4), ngữ nghĩa và bài tập đăng ký ( xem ở đây để biết tất cả mọi thứ). Tuy nhiên, đặc biệt đối với static constcác biến, hầu hết các tính năng bổ sung đó không được phép hoặc không áp dụng (đặc biệt là khi mã toàn cầu không hiển thị đối với mã ứng dụng ).

Các static constphiên bản có thể cho phép một số tối ưu hóa trình biên dịch (những người nhỏ), đặc biệt là nếu loại biến phức tạp hơn (chẳng hạn như một float4hoặc loại ma trận), nhưng điều đó dường như khó có thể quan trọng hơn nhiều.

Cuối cùng, chọn một trong những bạn thích phong cách.


1
Có một lý do tại sao người ta muốn static constđến const? Có tối ưu hóa cụ thể static constmà sẽ không áp dụng cho const? Đó là giả sử giá trị được gán chính nó chỉ là một hằng số.
Shahbaz

Một biến cục bộ const const chỉ được khởi tạo một lần, nhưng một const thông thường có lẽ sẽ được khởi tạo mỗi lần. Bạn muốn có một hằng số tĩnh nếu việc khởi tạo sẽ phụ thuộc vào các tham số cho hàm, chẳng hạn. Ngoài ra, tôi không nghĩ có gì đặc biệt mà trình tối ưu hóa sẽ làm.

Cảm ơn. Tôi đang thấy các trường hợp như static const float something = 1.53;ví dụ, sau đó không nên tạo sự khác biệt dù có hay không static.
Shahbaz
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.