C++ - SDL: problemas de rendimiento de Blitting

Soy principiante en C++ y SDL, pero llevo varios años desarrollando juegos.

Elegí SDL por su sencillez ya que lo único que quería era un juego en 2D, pero no estoy satisfecho. Las funciones que trabajan con superficies consumen mucha energía, demasiada para ser honesto.

Cuando comencé a usar SDL, obtuve como 30 FPS. Luego descubrí la optimización de superficies, la velocidad de fotogramas saltó a 60. También cambiar el formato de píxeles de 24 bits a 32 bits lo mejoró a 100.

En mi opinión, este rendimiento en comparación con otras bibliotecas para el desarrollo de juegos y lenguajes de programación es débil. Seguía pensando que todavía era mi culpa y que mi FPS podría dispararse si tenía todo configurado correctamente.

Así que seguí probando para encontrar que no tener ningún código ejecutándose (excluyendo mi indicador de FPS) me da 400 FPS. Sin embargo, borrar la pantalla con la función SDL_FillRect() la reduce a 100. Luego, por cada sprite dibujado, la velocidad de fotogramas es cada vez más baja.

¿De verdad se supone que es tan lento?

preguntado el 30 de junio de 12 a las 21:06

¿Están las superficies que está secando en el mismo formato del video? -

1 Respuestas

En primer lugar, 100 FPS no es lento. Cualquier cosa sobre 60 es irrelevante en la mayoría de los casos debido a las frecuencias de actualización del monitor de todos modos.

En segundo lugar, ¿qué tipo de superficies estás limpiando? Recuerdo que cuando hice un gran juego de SDL, me sorprendió mucho descubrir que una imagen en particular que tenía tardaba una eternidad en borrarse. Pero jugar un poco con la calidad para eliminar el tramado hizo que comenzara a parpadear casi instantáneamente nuevamente. Creo que SDL usa la codificación de longitud de ejecución internamente, por lo que las imágenes que contienen ejecuciones se borrarán más rápido.

Respondido el 30 de junio de 12 a las 21:06

Los sprites que estoy usando están todos cargados desde archivos de mapa de bits. El tamaño es de aproximadamente 100 x 100 para cada uno. - Aaron

La superficie principal que se muestra en la pantalla tiene banderas HWSURFACE y DOUBLEBUF. Cambiar HWSURFACE a SWSURFACE y eliminar DOUBLEBUF no tiene efecto en la velocidad de fotogramas. - Aaron

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.