Estoy desarrollando un juego 2D basado en sprites para plataformas móviles y estoy usando OpenGL (bueno, en realidad Irrlicht) para renderizar gráficos. Primero implementé el renderizado de sprites de una manera simple: cada objeto del juego se representa como un quad con su propia llamada de sorteo de GPU, lo que significa que si tuviera 200 objetos de juego, haría 200 llamadas de sorteo por cuadro. Por supuesto, esta fue una mala elección y mi juego estaba completamente vinculado a la CPU porque hay una pequeña sobrecarga de CPU en cada llamada de sorteo de GPU. GPU permaneció inactivo la mayor parte del tiempo.
Ahora, pensé que podría mejorar el rendimiento al recopilar objetos en grandes lotes y renderizar estos lotes con solo unas pocas llamadas de sorteo. Implementé el procesamiento por lotes (para que cada objeto del juego que comparte la misma textura se procese en el mismo lote) y pensé que mis problemas se habían ido ... solo para descubrir que mi velocidad de fotogramas era incluso más baja que antes.
¿Por qué? Bueno, tengo 200 (o más) objetos de juego, y se actualizan 60 veces por segundo. Cada cuadro que tengo que volver a calcular la nueva posición (traslación y rotación) para vértices en la CPU (la GPU en plataformas móviles no admite la creación de instancias, por lo que no puedo hacerlo allí), y hacer este cálculo 48000 por segundo (200 * 60 * 4 desde cada sprite tiene 4 vértices) simplemente parece ser demasiado lento.
¿Qué podría hacer para mejorar el rendimiento? Todos los objetos del juego se mueven / giran (casi) cada cuadro, así que realmente tengo que volver a calcular las posiciones de los vértices. La única optimización que se me ocurre es una tabla de búsqueda de rotaciones para no tener que calcularlas. ¿Ayudarían los sprites de punto? ¿Algún truco desagradable? ¿Algo más?
Gracias.