Hasta ahora hemos estado aplicando Blit a nuestras imágenes en bruto. Ya que solo estábamos mostrando una sola imagen, esto no importa. Sin embargo, cuando estás haciendo un juego, este proceso ocasiona una pérdida de rendimiento innecesaria. Vamos a convertir las imágenes a un formato optimizado para acelerar la carga.
SDL2 también tiene una nueva función para las superficies llamada estiramiento por software, lo que te permite aplicar un blit a una imagen y modificar su tamaño. En este tutorial vamos a tomar una imagen de la mitad del tamaño de la pantalla, y la estiraremos al tamaño completo.
En nuestra función de carga de imágenes, le haremos unas cuantas modificaciones para que la superficie se convierta al momento de la carga. Al principio de la función tenemos la forma en la que hemos estado cargando superficies hasta ahora, pero también declaramos un puntero a la imagen final.
Si la imagen fue cargada correctamente en las líneas previas de código, optimizamos la superficie que fue cargada.
Verás, cuando cargas una imagen de mapa de bits, normalmente está cargada en un formato de 24 bits, ya que la mayoría de estas son de 24 bits. La mayoría, si no es que todas las pantallas modernas no son de 24 bits por default. Si aplicamos una imagen de 24 bits en otra imagen de 32 bits, SDL tendrá que convertirla cada vez que la imagen sea aplicada.
Por lo tanto, lo que vamos a hacer es que, al momento de cargar la imagen, la convertiremos al mismo formato que tenga la pantalla, así no ocurrirá una conversión en el momento de aplicación de esta. Esto se puede hacer facilmente con la función SDL_ConvertSurface. Todo lo que tenemos que hacer es pasarle la superficie que queremos convertir con el formato de la pantalla.
Es importante notar que la función regresará una copia de la superficie original en el formato nuevo. La original todavía se mantiene en memoria después de ejecutar esta llamada. Esto significa que tenemos que liberar la superficie original, o de otra forma tendremos 2 copias de la misma imagen en memoria.
Después de que la imagen se haya cargado y convertido, regresamos la imagen optimizada.
SDL2 ahora tiene una función dedicada para aplicar imágenes con un tamaño distinto: SDL_BlitScaled. Como hemos visto anteriormente, esta función toma una superficie fuente para aplicarla contra una superficie destino. También toma un SDL_Rect que define la posición y tamaño de la imagen a aplicar.
Asi que si queremos tomar una imagen que es más pequeña que la pantalla, y hacerla del tamaño de esta, tienes que hacer el ancho/alto sea el mismo que el de la pantalla.
¡Descarga el código fuente y los recursos de esta publicación aquí!
SDL2 también tiene una nueva función para las superficies llamada estiramiento por software, lo que te permite aplicar un blit a una imagen y modificar su tamaño. En este tutorial vamos a tomar una imagen de la mitad del tamaño de la pantalla, y la estiraremos al tamaño completo.
En nuestra función de carga de imágenes, le haremos unas cuantas modificaciones para que la superficie se convierta al momento de la carga. Al principio de la función tenemos la forma en la que hemos estado cargando superficies hasta ahora, pero también declaramos un puntero a la imagen final.
Si la imagen fue cargada correctamente en las líneas previas de código, optimizamos la superficie que fue cargada.
Verás, cuando cargas una imagen de mapa de bits, normalmente está cargada en un formato de 24 bits, ya que la mayoría de estas son de 24 bits. La mayoría, si no es que todas las pantallas modernas no son de 24 bits por default. Si aplicamos una imagen de 24 bits en otra imagen de 32 bits, SDL tendrá que convertirla cada vez que la imagen sea aplicada.
Por lo tanto, lo que vamos a hacer es que, al momento de cargar la imagen, la convertiremos al mismo formato que tenga la pantalla, así no ocurrirá una conversión en el momento de aplicación de esta. Esto se puede hacer facilmente con la función SDL_ConvertSurface. Todo lo que tenemos que hacer es pasarle la superficie que queremos convertir con el formato de la pantalla.
Es importante notar que la función regresará una copia de la superficie original en el formato nuevo. La original todavía se mantiene en memoria después de ejecutar esta llamada. Esto significa que tenemos que liberar la superficie original, o de otra forma tendremos 2 copias de la misma imagen en memoria.
Después de que la imagen se haya cargado y convertido, regresamos la imagen optimizada.
SDL2 ahora tiene una función dedicada para aplicar imágenes con un tamaño distinto: SDL_BlitScaled. Como hemos visto anteriormente, esta función toma una superficie fuente para aplicarla contra una superficie destino. También toma un SDL_Rect que define la posición y tamaño de la imagen a aplicar.
Asi que si queremos tomar una imagen que es más pequeña que la pantalla, y hacerla del tamaño de esta, tienes que hacer el ancho/alto sea el mismo que el de la pantalla.
¡Descarga el código fuente y los recursos de esta publicación aquí!