Pracuję nad małą grą komputerową opartą na kafelkach / ikonkach z zespołem ludzi i mamy problemy z wydajnością. Ostatni raz korzystałem z OpenGL około 2004 roku, więc uczyłem się, jak korzystać z profilu podstawowego i czuję się trochę zdezorientowany.
Muszę narysować w sąsiedztwie 250-750 kafelków 48x48 na ekranie każdej klatki, a także może około 50 duszków. Płytki zmieniają się tylko po załadowaniu nowego poziomu, a duszki cały czas się zmieniają. Niektóre kafelki składają się z czterech kawałków 24x24, a większość (ale nie wszystkie) duszków ma taki sam rozmiar jak kafelki. Wiele kafelków i duszków używa mieszania alfa.
Teraz robię to wszystko w trybie natychmiastowym, co, jak wiem, jest złym pomysłem. Niemniej jednak, gdy jeden z członków naszego zespołu próbuje go uruchomić, dostaje bardzo złe liczby klatek na sekundę (~ 20-30 fps), i jest znacznie gorzej, gdy jest więcej płytek, szczególnie gdy wiele z tych płytek jest tego rodzaju, że są pocięte na kawałki. To wszystko sprawia, że myślę, że problemem jest liczba wykonywanych sprawdzeń.
Zastanawiałem się nad kilkoma możliwymi rozwiązaniami tego problemu, ale chciałem je uruchomić przez niektórych ludzi, którzy wiedzą o czym mówią, więc nie marnuję czasu na coś głupiego:
PŁYTKI:
- Po załadowaniu poziomu narysuj wszystkie płytki raz w buforze ramki dołączonym do dużej tekstury honowania i po prostu narysuj duży prostokąt z tą teksturą na każdej ramce.
- Umieść wszystkie płytki w statycznym buforze wierzchołków, gdy poziom zostanie załadowany, i narysuj je w ten sposób. Nie wiem, czy istnieje sposób rysowania obiektów o różnych teksturach za pomocą jednego wywołania glDrawElements, czy też jest to coś, co chciałbym zrobić. Może po prostu umieścisz wszystkie płytki w dużej gigantycznej fakturze i użyjesz zabawnych współrzędnych tekstury w VBO?
DUCHY:
- Narysuj każdą duszkę osobnym wywołaniem glDrawElements. Wydaje się, że wiąże się to z dużą ilością zmian tekstur, co, jak mi powiedziano, jest złe. Czy tablice tekstur mogą być przydatne tutaj?
- Jakoś użyj dynamicznego VBO. To samo pytanie dotyczące tekstury, jak numer 2 powyżej.
- Point sprites? To chyba głupie.
Czy któryś z tych pomysłów jest sensowny? Czy jest gdzieś dobre wdrożenie, nad którym mógłbym spojrzeć?