คุณมีเคล็ดลับหรือกลอุบายอะไรบ้างเมื่อพูดถึงการทำให้ OpenGL มีประสิทธิภาพมากขึ้น
คุณมีเคล็ดลับหรือกลอุบายอะไรบ้างเมื่อพูดถึงการทำให้ OpenGL มีประสิทธิภาพมากขึ้น
คำตอบ:
ใช้ VBO แทน glStart () / glEnd () สิ่งนี้ช่วยประหยัดรอบในการถ่ายโอนข้อมูลไปยังหน่วยความจำของ GPU
glStart()/glEnd()
จริงกองกำลังนี้เมื่อคุณก็ไม่ได้มีความเท่าเทียมกันของ
สิ่งเหล่านี้มาจากเอกสารอ้างอิงของ Apple ใน OpenGL แต่ทุกอย่างช่วยได้ใช่มั้ย ;)
การเพิ่มประสิทธิภาพประสิทธิภาพ OpenGL: พื้นฐาน
การเพิ่มประสิทธิภาพการรับส่งข้อมูล OpenGL บน OS X
(อันสุดท้ายคือแอปพลิเคชันตัวอย่าง)
การเพิ่มประสิทธิภาพ Vertex
นอกจากนี้ยังมีวิดีโอจำนวนมากที่มีอยู่ในหัวข้อ (เช่นจาก Apple) ที่พูดถึงส่วนขยาย OpenGL บางตัวมีเฉพาะ OS X แต่มีบางตัวที่ได้รับการปรับให้กว้างขึ้นและอาจนำไปใช้กับ Windows และ Linux ได้
คุณสามารถค้นหาวิดีโอที่นี่ คุณต้องใช้ iTunes และบัญชี Apple เพื่อดูอย่างไรก็ตาม (แต่ฟรี!: D)
มันขึ้นอยู่กับสิ่งที่คุณวางแผนจะทำ แต่นี่คือพื้นฐาน:
CPU ของคุณมีค่ามากในขณะที่ GPU ของคุณเป็นสัตว์ร้าย ชดเชยมากที่สุดเท่าที่คุณสามารถทำได้กับ GPU ทุกวันนี้คุณสามารถทำได้ด้วยห้องสมุดที่ยอดเยี่ยมเช่น OpenCL, CUDA และ Thrust
ทำแสงของคุณใน Shader สิ่งนี้ไม่เพียง แต่จะช่วยรักษาสติของคุณเท่านั้น แต่ยังช่วยให้คุณทำสิ่งที่เจ๋ง ๆ อย่างตูนเดอร์และแสงไฟที่เลื่อนออกไป
อนุภาคดูด แม้เมื่อใช้ OpenGL point sprite
ลดการเปลี่ยนแปลงสถานะของคุณให้น้อยที่สุด บนแพลตฟอร์มจำนวนมากการเปลี่ยนสถานะแต่ละครั้งอาจทำให้ท่อส่ง จะดีกว่ามากในการรวมรายการที่คล้ายกันเข้าด้วยกันและเปลี่ยนสถานะหนึ่งครั้ง
glEnable(GL_CULL_FACES);
ง่าย ๆ หนึ่งซับที่ใช้หลังการเลือกสรรใบหน้า สิ่งนี้ยอดเยี่ยมสำหรับการลดจำนวนรูปหลายเหลี่ยม นอกจากนี้ให้ดูที่ Frustum / Occlusion culling เพื่อลดจำนวนโพลี
สิ่งที่ควรพิจารณาอีกประการหนึ่งคือ SIMD สำหรับเวกเตอร์และควอเทอร์นารีของคุณ (ส่วนใหญ่ใช้ในการหมุนกล้อง) หากคุณไม่ต้องการยุ่งกับ ASM ให้ลองใช้ libSIMD ซึ่งเป็นห้องสมุดที่ยอดเยี่ยมสำหรับจัดการ SIMD ใน C
อย่าใช้ glGet * เมื่อคุณสามารถเข้าถึงตัวแปรเฉพาะที่ได้เช่น:
การเรียกเหล่านี้ช้ามาก
ย้ายสิ่งที่ไม่ได้ใช้นอก glBegin - glEnd clause (ไม่ว่าจะเป็น glColor หรือ glNormal หรืออย่างอื่น) หากไม่มีการเปลี่ยนแปลงภายใน OpenGL เป็นเครื่องสถานะมันใช้ค่าสุดท้าย
คำสั่ง OpenGL ที่เล็กที่สุดคือกุญแจ ดังนั้นคุณจะต้องแบทช์คำสั่งการวาดทั้งหมด สำหรับเกม 2d เป็นความคิดที่ดีที่จะใช้ Altas Texture และวาด sprite ทั้งหมดที่แชร์พื้นผิวเดียวกันในคำสั่ง opengl
ชุดแบทช์แบทช์ !! (Ab) ใช้ GPU เพื่อแสดงผลมากที่สุดในการเรียกแต่ละครั้ง เกมส่วนใหญ่ถูก จำกัด ด้วยจำนวนการเปลี่ยนแปลงสถานะไม่มากตามจำนวนของรูปสามเหลี่ยม