IMHO Istnieją trzy powody, dla których warto używać OpenGL ES w grze:
- Unikaj różnic między platformami mobilnymi, stosując otwarty standard;
- Aby mieć większą kontrolę nad procesem renderowania;
- Aby skorzystać z równoległego przetwarzania GPU;
Rysowanie tekstu jest zawsze problemem w projektowaniu gier, ponieważ rysujesz rzeczy, więc nie możesz mieć wyglądu i stylu typowego działania, z widżetami i tak dalej.
Możesz użyć struktury do generowania czcionek bitmapowych z czcionek TrueType i renderowania ich. Wszystkie struktury, które widziałem, działają w ten sam sposób: generuj współrzędne wierzchołka i tekstury dla tekstu w czasie rysowania. Nie jest to najbardziej efektywne wykorzystanie OpenGL.
Najlepszym sposobem jest przydzielenie zdalnych buforów (obiektów buforów wierzchołków - VBO) dla wierzchołków i tekstur na wczesnym etapie kodu, unikając leniwych operacji transferu pamięci w czasie rysowania.
Pamiętaj, że gracze nie lubią czytać tekstu, więc nie napiszesz długiego, dynamicznie generowanego tekstu. W przypadku etykiet można używać tekstur statycznych, pozostawiając tekst dynamiczny na czas i punktację, a oba są numeryczne i składają się z kilku znaków.
Moje rozwiązanie jest więc proste:
- Utwórz teksturę dla typowych etykiet i ostrzeżeń;
- Utwórz teksturę dla liczb 0-9, „:”, „+” i „-”. Jedna tekstura dla każdej postaci;
- Generuj zdalne VBO dla wszystkich pozycji na ekranie. Potrafię renderować statyczny lub dynamiczny tekst w tych pozycjach, ale VBO są statyczne;
- Wygeneruj tylko jedną teksturę VBO, ponieważ tekst jest zawsze renderowany w jeden sposób;
- W czasie rysowania renderuję tekst statyczny;
- W przypadku tekstu dynamicznego mogę zerknąć na pozycję VBO, pobrać teksturę postaci i narysować ją, po jednej postaci.
Operacje rysowania są szybkie, jeśli używasz zdalnych buforów statycznych.
Tworzę plik XML z pozycjami ekranu (na podstawie procentu przekątnej ekranu) i teksturami (statyczne i znaki), a następnie ładuję ten XML przed renderowaniem.
Aby uzyskać wysoki współczynnik FPS, należy unikać generowania VBO w czasie rysowania.