Chia sẻ chức năng trên nhiều shader


10

Câu hỏi đơn giản:

Trong GLSL, có cách nào để chia sẻ các chức năng trên nhiều trình đổ bóng hay tôi phải xác định tất cả các chức năng trong mỗi trình đổ bóng cần chúng?

Câu trả lời:


12

Bạn có thể xác định một số chức năng trong tệp tiêu đề và #incolee chúng vào shader của bạn. Đó là một khác nhau chút từ C / C ++ trong đó bạn muốn đặt các cơ quan chức năng của bạn trong các tiêu đề, không chỉ là nguyên mẫu của họ (vì shaders không có khái niệm về biên soạn riêng & liên kết), nhưng khác hơn là nó giống như C / C ++ tiêu đề.


2
Lưu ý rằng ít nhất #include không thực sự được hỗ trợ trong bất kỳ phiên bản GLSL nào cho đến 3.30, ngoại trừ thông qua tiện ích mở rộng không phổ biến. Bất kỳ khung shader phong nha nào cũng nên mở rộng ngôn ngữ để cung cấp tính năng này, mặc dù (bao gồm cả Cg).
Sean Middleditch

7

Nếu #include không khả dụng, bạn sẽ sử dụng các đối số của glShaderSource để chỉ định nội dung được chia sẻ. Thí dụ:

char *sharedcode = "...shared code here...";
char *fs1 = "...fragment shader 1...";
char *fs2 = "...fragment shader 2...";

char *awesomeeffect1[] = {sharedcode, fs1};
char *awesomeeffect2[] = {sharedcode, fs2};

glShaderSource (shader1, 2, awesomeeffect1, NULL);
glShaderSource (shader2, 2, awesomeeffect2, NULL);
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.