estoy hasta el gorro del engine. Ya tengo todos los gráficos pasados a PNG que ha costado lo suyo y ahora me disponía a poner el nuevo OSD con alpha por pixel (cada pixel puede tener una transparencia distinta) y ahora no va
Antes de hacer todos los cambios del engine para ocupar menos memoria y ser más compatible con todas las VGA había probado los PNG con transparencia por pixel (el nuevo OSD es así) y en 32 bits de color funcionaba bien, por eso en la última versión que subí, aunque con la opción de 32bits de color no iba bien no lo quité porque estaba esperando a poner el nuevo OSD para arreglarlo pero resulta que ahora no hay forma de hacerlo funcionar ni en 32bits ni (evidentemente) en 24bits de color. Los gráficos si que se pintan en pantalla pero han perdido la información de la transparencia. Estuve un par de horas tocando configuraciones y no conseguí nada.
Me va a tocar volver a la versión vieja en la que si que iba e ir aplicando los cambios uno a uno hasta que encuentre donde ha dejado de funcionar.
Si todas las horas que he dedicado a MRO en los últimos meses hubieran sido programando cosas del juego (y no problemas de engine multiplataforma) ahora mismo tendríamos un MRO super completísimo con millones de opciones, pero todo el tiempo se ha ido intentando arreglar problemas gráficos. Espero acabar ya de una vez por todas con los gráficos y poder dedicarme a.... bueno primero a acabar en engine de sonido que le faltan algunas cosas, luego a acabar el engine de los controles (teclado, joystick, ratón, táctil..), luego los menús independientes de cualquier plataforma y finalmente dedicar todo el tiempo a programar cosas propiamente del juego. Aunque el orden no lo voy a seguir así, porque si no, no tendremos nueva versión de MRO en mucho tiempo. Lo que voy a hacer es una vez acabado el engine gráfico programar unas cuantas cosas propias del juego como las nuevas reglas 2014 (DRS, ERS-K y H) y los nuevos OSD manteniendo el sonido y controles de DirectX, por lo tanto solo tendremos versión de MRO para Windows de 32 bits. Luego acabaré el engine de sonido y controles para eliminar el DirectX y así poder compilar el juego también para Windows 64 bits y finalmente acabaré el engine de Menus que me permitirá compilar para OSX, IOS y Android.
Como había comentado en el post anterior estos días había puesto la resolución de 800x480 (de dentro de la pista) estirada a 1360x768 que es la resolución de los menús y la imagen del circuito quedaba muy fea por el estiramiento:
Así que añadí la función Antialiasing de SDL que se supone que suaviza las imágenes estiradas y bordes, pero desgraciadamente tiene un problema en SDL y en los bordes de los sprites aparece el color de fondo de estos (el que debería ser el color transparente) que suele ser rosa o verde dejando todo un contorno coloreado que queda fatal:
Esto se supone que es un problema temporal y que en alguna versión futura de SDL lo arreglarán aunque ya lo van diciendo desde SDL1.0 y ahora estamos en el SDL2.0.3 y sigue igual, así que se me ocurrió cambiar todos los BMP que no admiten color transparente (por eso ponemos un color de los que no se usan en el gráfico, como el rosa o verde, para el fondo) por los PNG que si que tienen color transparente, pero todo mi gozo en un pozo, porque aunque tengan transparencia, internamente es un color más de la paleta que luego decimos que no se pinte, pero al hacer antialiasing si que se tiene en cuenta ese color y sigue saliendo en el borde. Así que había que buscar otra solución e hice pruebas con fondos blancos, grises y negros a ver cual quedaba mejor y claramente con fondo negro es como mejor queda, así que preparé un programita al que le digo la carpeta donde tengo los BMP o PNG y me los convierte todos a PNG pero primero busca cual es el primer color negro (RGB=0,0,0 -> 1,1,1 -> 2,2,2...) que no se usa en la imagen y lo aplica a todo el fondo y luego lo convierte en transparente de forma que ahora el antialiasing se ve mucho mejor. Cuando suba la versión también os pasaré este programita para que podáis convertir los gráficos que tengáis personalizados como coches y mecánicos que no son del pack oficial. Así se ve en antialiasing con el fondo de los sprites negro:
Todas estas capturas están hechas a una resolución real de 1360x768 pero pintando una imagen estirada de 800x480. Lo otra resolución que barajaba para el circuito era de la 1024x600 pero creo que dejaré la de 800 que es lo que tienen casi todos los móviles y además porque se ve todo más grande y con más sensación de velocidad. De momento los menús siguen con las resoluciones de 1024x768 (para monitores 4:3) o 1280x800 (para 16:10) o 1360x768 (para 16:9) pero cuando cambie a los nuevos menús ya tendrán la resolución de 800x480 y no habrá que estirar el circuito, mejorando más la calidad.
A ver si consigo volver a hacer funcionar (de nuevo) la transparencia por pixel y por lo tanto los 32bits de color y subo la versión.
Saludos.