ใช้บัฟเฟอร์แบบสม่ำเสมอ (เช่นบัฟเฟอร์คงที่ในศัพท์แสง D3D)
ตราบใดที่เฉดสีทั้งหมดของคุณเห็นด้วยกับรูปแบบและจุดผูกมัดของบัฟเฟอร์แต่ละอันจากนั้นการอัปเดตจะกลายเป็นเรื่องง่าย นางแบบไม่จำเป็นต้องรู้อะไรเกี่ยวกับเฉดสีเลย พวกเขาต้องการเพียงแค่อัพเดทเมทริกซ์โมเดลมุมมองในบัฟเฟอร์คงที่และไปป์ไลน์การเรนเดอร์จะใช้มันโดยอัตโนมัติ
อย่างน้อยฉันก็เถียงคุณควรมีบัฟเฟอร์สองอัน อย่างแรกควรจัดเก็บเมทริกซ์การฉายของคุณเมทริกซ์กล้องเมทริกซ์การต่อภาพกล้องที่ต่อกันข้อมูลวิวพอร์ตรายละเอียด frustrum และเมทริกซ์ผกผัน คุณต้องอัปเดตบัฟเฟอร์นี้หนึ่งครั้งต่อฉาก
จากนั้นให้แต่ละบัฟเฟอร์อีกรุ่นหนึ่งเพื่อจัดเก็บเมทริกซ์มุมมองโมเดลเมทริกซ์ปกติค่าผกผันและคุณสมบัติของวัสดุ นี่คือการอัปเดตหนึ่งครั้งสำหรับแต่ละรุ่นและสามารถทำได้ในรหัสผ่านการอัปเดตที่แตกต่างกัน (ถ้า / เมื่อเหมาะสม) ข้อมูลวัสดุสามารถ / ควรย้ายไปยังบัฟเฟอร์เฉพาะวัสดุตัวที่สามถ้าคุณมีความสามารถในการแบ่งปันวัสดุระหว่างวัตถุหลาย ๆ
ในการตั้งค่าการแรเงาไปข้างหน้ามันทำให้รู้สึกถึงการใส่ไฟทั้งหมดในบัฟเฟอร์อื่นและในการแรเงาที่เลื่อนออกไปมันก็สมเหตุสมผลที่จะใช้บัฟเฟอร์ต่อแสงสำหรับแสงผ่าน (แทนที่รูปแบบ / วัสดุบัฟเฟอร์ที่ใช้ใน เรขาคณิตผ่าน)
โปรดทราบว่าคุณต้องใช้ GL รุ่นที่ทันสมัยอยู่ในระดับปานกลางเพื่อใช้บัฟเฟอร์แบบสม่ำเสมอ (3.1 หรือส่วนขยายโดยทั่วไปเพียงพอในทุกวันนี้ยกเว้นในแล็ปท็อปรุ่นเก่า แต่ยังคงใช้งานอยู่) และคุณต้องการเวอร์ชั่นล่าสุด สามารถผูกบัฟเฟอร์เครื่องแบบไปยังตำแหน่งที่มีผลผูกพันเฉพาะจากภายในรหัส shader (4.2 ยังคงเป็นเรื่องแปลก แต่ดีขึ้น) มิฉะนั้นคุณต้องทำงานเพิ่มเติมในรหัสฝั่ง CPU ของคุณเพื่อตั้งค่าสิ่งต่าง ๆ (รหัส CPU ของคุณจำเป็นต้องรู้ผูกพันที่ถูกต้อง ให้คะแนนเลยดังนั้นมันจึงเป็นกลิ่นของ API มากกว่าปัญหาร้ายแรง) OpenGL | ES ไม่ได้เพิ่มบัฟเฟอร์แบบสม่ำเสมอจนกระทั่ง 3.0 ซึ่งยังไม่รองรับบนแพลตฟอร์มมือถือยอดนิยม
หากบัฟเฟอร์ไม่ใช่ตัวเลือกคุณจะต้องมีสถานที่ส่วนกลางบางแห่งในการจัดเก็บตำแหน่งดัชนีสำหรับ shader ที่ใช้งานอยู่ คุณสามารถใช้glGetUniformLocation
หลังจากโหลด shader ของคุณเพื่อค้นหาดัชนีสำหรับชื่อที่รู้จักกันดี (เช่นModelViewMatrix
หรือชอบ) จากนั้นจัดเก็บดัชนีเหล่านี้ การเรนเดอร์ของคุณสามารถแมปค่า enum เช่นMODEL_VIEW
ส่งไปยังSetUniform
ฟังก์ชัน wrapper เพื่อดูใน shader ที่ถูกผูกไว้ค้นหาดัชนีและโทรglUniform
อย่างถูกต้อง มันไม่ใช่การเปลี่ยนแปลงครั้งใหญ่ในการใช้งานรหัสลูกค้าจากบัฟเฟอร์อื่น ๆ นอกเหนือจากการตั้งค่าชุดเครื่องแบบแต่ละชุดแยกกันหากคุณได้รับทุกอย่างเรียบร้อย
ดูGLSL inteface บล็อกและเครื่องแบบวัตถุบัฟเฟอร์