Я розвиваю спрайтову 2D гру для мобільних платформ (платформ) і використовую OpenGL (ну, власне, Irrlicht) для візуалізації графіки. Спочатку я здійснив спрайт-рендерінг простим способом: кожен ігровий об’єкт відображається як квадратик із власним графічним викликом GPU, тобто, якщо у мене було 200 ігрових об'єктів, я робив 200 дзвінків на кадр. Звичайно, це був поганий вибір, і моя гра була повністю пов'язана з процесором, тому що в кожному розіграші GPU притягується невелика кількість центральних процесорів. GPU залишався бездіяльним більшість часу.
Тепер я подумав, що міг би покращити продуктивність, збираючи предмети у великі партії та надаючи ці партії лише кількома дзвінками. Я реалізував пакетну групування (щоб кожен ігровий об'єкт, що ділився однією і тією ж текстурою, відображався в одній партії) і подумав, що моїх проблем немає ... лише для того, щоб дізнатися, що частота кадрів була меншою, ніж раніше.
Чому? Ну, у мене є 200 (і більше) ігрових об’єктів, і вони оновлюються 60 разів за секунду. Кожен кадр я повинен перерахувати нове положення (переклад та обертання) для вершин у процесорі (GPU на мобільних платформах не підтримує екземпляри, тому я не можу це зробити там), і роблю цей розрахунок 48000 в секунду (200 * 60 * 4, оскільки кожен спрайт має 4 вершини) просто здається занадто повільним.
Що я міг би зробити для покращення продуктивності? Всі ігрові об’єкти рухаються / обертаються (майже) кожен кадр, тому мені дійсно доведеться перерахувати вершинні позиції. Єдина оптимізація, яку я міг би придумати, - це оглядова таблиця поворотів, щоб мені не довелося їх обчислювати. Чи допоможуть точкові спрайти? Будь-які неприємні хаки? Ще щось?
Дякую.