İnsanlardan oluşan bir ekiple küçük bir karo / sprite tabanlı PC oyunu üzerinde çalışıyorum ve performans sorunlarıyla karşı karşıyayız. OpenGL'i en son kullandığım 2004 civarındaydı, bu yüzden kendime çekirdek profili nasıl kullanacağımı öğretiyorum ve kendimi biraz karışık buluyorum.
Her kareye ekrana 250-750 adet 48x48 fayans çizmem gerekiyor, belki de yaklaşık 50 sprite. Döşemeler yalnızca yeni bir seviye yüklendiğinde değişir ve sprite her zaman değişir. Döşemelerin bir kısmı dört adet 24x24 parçadan oluşuyor ve spriteların çoğu (hepsi değil) karolarla aynı boyutta. Birçok fayans ve sprite alfa harmanı kullanır.
Şu anda bunların hepsini acil modda yapıyorum, ki bunun kötü bir fikir olduğunu biliyorum. Aynı şekilde, ekip üyelerimizden biri onu çalıştırmaya çalıştığında, çok kötü kare hızları alır (~ 20-30 fps) ve daha fazla kiremit olduğunda, özellikle de bu kiremitlerin çoğu türün parçalar halinde kesilir. Tüm bunlar bana sorunun yapılan aramaların sayısı olduğunu düşündürüyor.
Bunun için birkaç olası çözüm düşündüm, ama ne hakkında konuştuğunu bilen bazı insanlar tarafından işletmek istedim, böylece zamanımı aptal bir şeyle harcamam.
KAROLAR
- Bir seviye yüklendiğinde, tüm döşemeleri bir kez büyük korna dokusuna tutturulmuş bir çerçeve tamponuna bir kez çizin ve üzerine her çerçevenin üzerinde o dokuya sahip büyük bir dikdörtgen çizin.
- Tüm döşemeleri, seviye yüklendiğinde statik köşe tamponuna koyun ve bu şekilde çizin. Tek tek bir çağrı ile farklı dokularla nesneler çizmenin bir yolu olup olmadığını ya da bu yapmak istediğim bir şey olup olmadığını bilmiyorum. Belki de tüm döşemeleri dev bir dokuya yerleştirin ve VBO'da komik doku koordinatlarını kullanın.
sprite:
- Her sprite glDrawElements için ayrı bir çağrı ile çizin. Bu bana kötü olduğu söylenen çok sayıda doku değiştirmeyi içeriyor gibi görünüyor. Burada doku dizileri yararlı olabilir mi?
- Bir şekilde dinamik bir VBO kullanın. Yukarıdaki 2 numaralı ile aynı doku sorusu.
- Nokta sprite? Bu muhtemelen aptalca.
Bu fikirlerden herhangi biri mantıklı mı? Bakabileceğim bir yerde iyi bir uygulama var mı?