การแชร์ฟังก์ชั่นข้ามหลายเฉดสี


10

คำถามง่าย ๆ :

ใน GLSL มีวิธีการใช้ฟังก์ชั่นร่วมกันในหลายเฉดสีหรือไม่หรือฉันต้องกำหนดฟังก์ชั่นทั้งหมดในทุกส่วนที่ต้องการ

คำตอบ:


12

คุณสามารถกำหนดฟังก์ชั่นบางอย่างในไฟล์ส่วนหัวและ # รวมไว้ใน shader ของคุณ มันค่อนข้างแตกต่างจาก C / C ++ ที่คุณใส่เนื้อหาของฟังก์ชันไว้ในส่วนหัวไม่ใช่แค่ต้นแบบ (เนื่องจาก shaders ไม่มีแนวคิดในการรวบรวม & ลิงก์แยกต่างหาก) แต่นอกเหนือจากนั้นก็เหมือนกับ C / C ++ ส่วนหัว


2
โปรดทราบอย่างน้อยว่า #include ไม่รองรับจริง ๆ ใน GLSL เวอร์ชันใด ๆ จนถึง 3.30 ยกเว้นว่ามีนามสกุลที่ไม่สามารถใช้ได้ในระดับสากล กรอบ shader ที่เหมาะสมควรขยายภาษาเพื่อให้คุณลักษณะนี้ (รวมถึง Cg)
ฌอน Middleditch

7

หาก #include ไม่พร้อมใช้งานคุณจะใช้อาร์กิวเมนต์ของ glShaderSource เพื่อระบุสิ่งที่แบ่งปัน ตัวอย่าง:

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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.