คำถามง่าย ๆ :
ใน GLSL มีวิธีการใช้ฟังก์ชั่นร่วมกันในหลายเฉดสีหรือไม่หรือฉันต้องกำหนดฟังก์ชั่นทั้งหมดในทุกส่วนที่ต้องการ
คำถามง่าย ๆ :
ใน GLSL มีวิธีการใช้ฟังก์ชั่นร่วมกันในหลายเฉดสีหรือไม่หรือฉันต้องกำหนดฟังก์ชั่นทั้งหมดในทุกส่วนที่ต้องการ
คำตอบ:
คุณสามารถกำหนดฟังก์ชั่นบางอย่างในไฟล์ส่วนหัวและ # รวมไว้ใน shader ของคุณ มันค่อนข้างแตกต่างจาก C / C ++ ที่คุณใส่เนื้อหาของฟังก์ชันไว้ในส่วนหัวไม่ใช่แค่ต้นแบบ (เนื่องจาก shaders ไม่มีแนวคิดในการรวบรวม & ลิงก์แยกต่างหาก) แต่นอกเหนือจากนั้นก็เหมือนกับ C / C ++ ส่วนหัว
หาก #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);