Mobil platformlar için hareketli grafik tabanlı bir 2D oyun geliştiriyorum ve grafikleri oluşturmak için OpenGL (aslında Irrlicht) kullanıyorum. İlk olarak hareketli grafik oluşturmayı basit bir şekilde uyguladım: her oyun nesnesi kendi GPU çizim çağrısı ile dörtlü olarak işlenir, yani 200 oyun nesnesim olsaydı, çerçeve başına 200 çizim çağrısı yaptım. Tabii ki bu kötü bir seçimdi ve oyunum tamamen CPU'ya bağlıydı çünkü her GPU çizim çağrısında küçük bir CPU ek yükü var. GPU çoğu zaman boşta kaldı.
Şimdi, nesneleri büyük gruplar halinde toplayarak ve bu grupları yalnızca birkaç çizim çağrısı ile oluşturarak performansı artırabileceğimi düşündüm. Toplu işlemi uyguladım (böylece aynı dokuyu paylaşan her oyun nesnesi aynı toplu işte işlenir) ve sorunlarımın gittiğini düşündüm ... sadece kare hızımın öncekinden daha düşük olduğunu bulmak için.
Neden? 200 (veya daha fazla) oyun nesnesim var ve saniyede 60 kez güncelleniyor. CPU'daki köşeler için yeni konumu (çeviri ve döndürme) yeniden hesaplamak zorunda olduğum her kare (mobil platformlarda GPU örneklemeyi desteklemediğinden bunu yapamam) ve bu hesaplamayı saniyede 48000 (200 * 60 * 4) her hareketli grafiğin 4 köşesi vardır) çok yavaş görünüyor.
Performansı artırmak için ne yapabilirim? Tüm oyun nesneleri her kareyi hareket ettiriyor / döndürüyor (neredeyse) bu yüzden köşe konumlarını yeniden hesaplamam gerekiyor. Sadece düşünebildiğim optimizasyon rotasyonlar için bir arama tablosu, böylece onları hesaplamak zorunda kalmayacağım. Nokta sprite yardımcı olur mu? Kötü hackler var mı? Başka herhangi bir şey?
Teşekkürler.