IMHO Bir oyunda OpenGL ES kullanmanın üç nedeni vardır:
- Açık bir standart kullanarak mobil platformlar arasındaki farklılıklardan kaçının;
- Render işlemi üzerinde daha fazla kontrole sahip olmak için;
- GPU paralel işlemeden yararlanmak için;
Metin çizmek, oyun tasarımında her zaman bir sorundur, çünkü bir şeyler çiziyorsunuz, bu nedenle ortak bir etkinliğin görünümünü ve hissini, widget'lar vb. İle elde edemezsiniz.
TrueType yazı tiplerinden Bitmap yazı tipleri oluşturmak ve bunları işlemek için bir çerçeve kullanabilirsiniz. Gördüğüm tüm çerçeveler aynı şekilde çalışıyor: çizim zamanında metin için köşe ve doku koordinatlarını oluşturun. Bu, OpenGL'nin en verimli kullanımı değildir.
En iyi yol, kodun başlarında köşeler ve dokular için uzak arabellekleri (köşe arabellek nesneleri - VBO'lar) ayırmak ve çizim zamanında yavaş bellek aktarım işlemlerinden kaçınmaktır.
Oyun oyuncularının metin okumayı sevmediğini ve bu nedenle dinamik olarak oluşturulmuş uzun bir metin yazmayacağınızı unutmayın. Etiketler için, zaman ve puan için dinamik metin bırakarak statik dokular kullanabilirsiniz ve her ikisi de birkaç karakter uzunluğunda sayısaldır.
Yani benim çözümüm basit:
- Yaygın etiketler ve uyarılar için doku oluşturun;
- 0-9, ":", "+" ve "-" sayıları için doku oluşturun. Her karakter için bir doku;
- Ekrandaki tüm pozisyonlar için uzak VBO'lar oluşturun. Bu konumlarda statik veya dinamik metin oluşturabilirim, ancak VBO'lar statiktir;
- Metin her zaman tek bir şekilde oluşturulduğundan yalnızca bir Doku VBO oluşturun;
- Çizim zamanında statik metni oluşturuyorum;
- Dinamik metin için, VBO konumuna göz atabilir, karakter dokusunu alabilir ve her seferinde bir karakter çizebilirim.
Uzak statik tamponlar kullanırsanız, çizim işlemleri hızlıdır.
Ekran konumları (ekranın çapraz yüzdesine bağlı olarak) ve dokuları (statik ve karakterler) içeren bir XML dosyası oluşturuyor ve ardından bu XML'i oluşturmadan önce yüklüyorum.
Yüksek bir FPS oranı elde etmek için, çekim anında VBO'lar oluşturmaktan kaçınmalısınız.