ฉันจำเป็นต้องแต่งเครื่องแบบหรือคุณลักษณะใหม่เมื่อเปลี่ยนโปรแกรม shader หรือไม่


11

การแสดงฉากมักจะเกี่ยวข้องกับโปรแกรม shader มากกว่าหนึ่งโปรแกรมซึ่งในกรณีของฉันทุกคนใช้คุณลักษณะเดียวกันและใช้เครื่องแบบอย่างน้อยบางส่วน เพื่อให้ทำงานอย่างถูกต้องฉันกำลังเล่นอย่างปลอดภัยซึ่งหมายความว่าฉันเชื่อมโยงคุณลักษณะใหม่และรับตำแหน่งเครื่องแบบที่เหมาะสมทุกครั้งที่ฉันสลับระหว่างโปรแกรม Shader ดังนั้นโดยทั่วไปหลายครั้งในทุก ๆ เฟรมซึ่งอาจไม่ใช่วิธีที่ดีที่สุด

ดังนั้นจำเป็นต้องรีบูทคุณลักษณะและชุดเครื่องแบบใหม่หลังจากเปลี่ยนโปรแกรม shader หรือไม่? และทำไม?

ถ้าเป็นเช่นนั้นมีวิธีการทำเช่นนี้หนึ่งครั้งในช่วงเริ่มต้นของโปรแกรมและไม่ต้องแตะอีกครั้ง (ยกเว้นการตั้งค่าเครื่องแบบ)?

คำตอบ:


12

คุณไม่จำเป็นต้องเชื่อมโยงแอตทริบิวต์ใหม่ตราบใดที่คุณมั่นใจว่าสถานที่ตั้งยังคงเหมือนเดิมในทั้งสองฝั่ง (โดยปกติจะใช้layout(location = X)ไวยากรณ์ใน GLSL แต่สามารถทำได้ด้วยglBindAttribLocationหากอดีตไม่พร้อมใช้งาน)

อย่างไรก็ตามเครื่องแบบเป็นส่วนหนึ่งของสถานะวัตถุของ Shader และจะต้องมีการตั้งค่าอย่างน้อยหนึ่งครั้งสำหรับทุก shader วิธีหนึ่งในการลดต้นทุนนี้คือการใช้Uniform Buffer Objectซึ่งจะมีค่าเครื่องแบบทั้งหมดของคุณและจากนั้นสามารถผูกกับ shader ด้วยการโทรเพียงครั้งเดียว


บนลิงก์ UBO ของคุณ: "สุดท้ายพวกเขาสามารถใช้เพื่อแชร์ข้อมูลระหว่างโปรแกรมที่แตกต่างกันดังนั้นการแก้ไขบัฟเฟอร์เดียวสามารถอนุญาตให้มีการอัพเดทเครื่องแบบในหลาย ๆ โปรแกรมได้อย่างมีประสิทธิภาพ"
Zouch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.