Development blog

Antes de la v5.0… la v4.96!

Despues de tener varias conversaciones con warwolf del foro de Stratos y debido a que desde que anuncie que los sprites soportaran rotacion y escalado, recibo casi un mail diario preguntando para cuando estara disponible he decidido sacar una version antes de la v5.0.

De este modo, con la v4.96 espero poder liberar todas las mejoras de sprites en mes antes de lo previsto, que si todo va bien, podria ser en noviembre. Pero como siempre, depende mucho del tiempo libre del que disponga que ultimamente mas bien brilla por su ausencia.. pero tiene que cambiar! no va a ver siempre mil incidencias en el curro jeje.

Adelanto por aqui las mejoras previstas en la v4.96 tal y como lo tengo en mi ToDo, luego esta ingles y espanol mezclado…pero se entiende:
· CFont:
– Added new SetKerning() member to set the kerning of the font.
– The format of stored fonts have changed. Load() member will automatically update it.
· CSprite:
– TODO Al clonar sprites…porque no clona el autorestore, pausa y demas??? deberia e indicarlo en la documentacion
– TODO Añadir a los sprites el hotx y hoty.
– TODO Seleccion del frame inicio y frame final de una animacion
– TODO revisar pingpong porque parece que se repite el ultimo frame
– TODO mirror,flip, rotacion y escalado.
· IScreenFX:
– TODO Added new Flip() member to flip a surface.
– TODO Added new Mirror() member to mirror a surface.
– TODO Added new Rotate() member to rotate a surface.
– TODO Improved Scale(): faster and direct support for 8bits surfaces.
· ITimeSystem: added a new warning message when CRM32Pro.Update() is used without to initialize ITimeSystem.
· IButton: fixed a problem with slider button.
· Fixed a bug in CRM32Pro.Update() when ITimeSystem was not initialized.
· Removed two little memory leaks.

Bueno, pues voy a trabajar otro poquito y ya dejo de perder tiempo con el blog 🙂


Rendimiento de SDL y CRM32Pro

Varias personas me han preguntado por mail si existe diferencia en el rendimiento entre usar solo SDL o CRM32Pro y la respuesta es afirmativa. Ojo, que esto solo es cierto en modo software. En modo hardware son totalmente identicas.

Hace ya mas de un año me dedique a optimizar el memcpy para que utilizara MMX, tecnicas prefetch, etc. adecuadas para cada arquitectura de CPU actuales. El resultado es que una vez que inicias CRM32Pro y aunque solo utilices SDL, estaras usando automaticamente las mejores funciones para tu micro y ademas, dependiendo del tamaño de la copia, tambien utilizara unas u otras.

Esta diferencia no es muy grande en condiciones normales, pero existe diferencia. En condiciones favorables, por ejemplo bliteo consecutivo de superficies grandes(como un fondo de un menu), la diferencia es bastante mas dramatica, en algunos casos, casi el 80%. Pero como estos casos no nos interesan..(a quien le importa si el menu va a mas o menos fps??), voy a colgar una grafica de las pruebas que hice en su momento en el caso mas desfavorable que es muchas copias de sprites de reducido tamaño(16x16pixels) de un juego que esta desarrollando Ivo Wubbels que casualmente, descubrio un bug serio de rendimiento en el apartado grafico. Este bug existia en las versiones anteriores a la 4.90, en el resto, esta reparado :).

SDL and CRM32Pro performance

Cuando tenga mas tiempo libre, colgare en la web otro benchmark sobre velocidad de bliteo de sprites para que podais comprobar en vuestros propios equipos la velocidad de solo SDL, de CRM32Pro y quizas para comparar, algun backend por hardware como ddraw y glSDL.


Ya he vuelto!

Ya ando de nuevo por aqui, en el curro tengo mil movidas que hacer y algun que otro problema mas todo el trabajo por continuar de CRM32Pro.

Ultimamente me estoy planteando mas que nunca el montar todo el codigo en subversion y buscar gente o esperar que se ofrezcan para poder trabajar mas rapido. Asi ademas, podria dedicarme a mis proyectos de juegos…que hace meses no puedo dedicarles nada de tiempo… en fin, no se que os parece la idea y si alguien estaria dispuesto a colaborar.


Estado actual de la v5.0

Algunos de los recursos fueron diseñados hace muchos años y tenia que conseguir un modo sencillo y eficaz de poder actualizarlos a una nueva version interna que permitiera facilmente agregar mas caracteristicas y tras pensar y ponerme con el mitico papel y boli, consegui un metodo que actualizara de forma transparente todos los recursos sin riesgo de perder nada, el incoveniente es que los nuevos recursos no seran compatibles con versiones anteriores de la libreria, aunque bueno, esto no es muy importante porque todos deberian empezar a usar la v5 y olvidarse de las anteriores :).

Por el momento, he actualizado el recurso fuente que he aprovechado para agregar una caracteristica nueva: el kerning. Ahora es posible activar un kerning en tiempo de ejecucion o seleccionar uno directamente desde el EditorDPF. Esto lo necesitaba alguien de alemania que esta terminando un juego de resolver crucigamas… a ver si lo termina y me envia algun screenshot.

Ahora me tengo que meter con la actualizacion del recurso sprite. De este modo, agregare las deseadas HotX y HotY para empezar el render desde esas posiciones, lo hare por cada animacion posible, me parece que bajar al nivel de frame seria un engorro grandisimo y poco util, y si lo hago a nivel de sprite, me cargo mucha funcionalidad, asi que el nivel adecuado es el de por cada animacion.

Despues de esto y tras el fracaso de las pruebas con algoritmos de escalado con filtros de alta calidad, voy a utilizar sdl_gfx y me quito de lios, he conseguido optimizar en velocidad en modos 16bits y 24bits y el resto, por defecto, sdl_gfx lo hace bastante bien y rapido. En el apartado Benchmark, pondre mas info sobre este “fracaso”.

El tema es que a IScreenFX tengo que añadirle un par de funciones nuevas:

-Flip() (ya esta implementada)
– Mirror() (ya esta implementada)
– Scale(), admite como parametros un float con el factor de escalado o el tamaño final. X e Y independientes.

– Rotate()

Tengo que terminar las dos ultimas usando sdl_gfx y despues hacer pruebas para ver que todo es correcto.

Acto seguido, ya podre incorporar escalado y rotacion a los sprites :). Como no se podra hacer en “realtime”, voy a utilizar un metodo que colgare por aqui por si alguien tiene alguna idea mejor, adelanto que se creara un nuevo sprite con su surface por cada escalado y rotacion que hagamos, es decir, gastaremos mas memoria a cambio de no tener que usar la cpu y matar las fps de cualquier juego.

Todo esto que he comentado esta al 60%, espero en este mes poder terminarlo para seguir con otros puntos de la nueva version…pero eso es ya otra historia..digo post 🙂


Semana de relax

Llevo unas ultimas semanas bastante liado con el curro, entre que hay muchas cosas que hacer, bastantes problemas que estan dando equipos antiguos (servidores que son muy utilizados) no he tenido mucho tiempo para todas las cosas que tengo… de hecho, en un mes he progresado muy poco.

Recapitulando tengo pendiente por terminar la v5.0 de CRM32Pro, un programita en modo consola para agregar y extraer recursos desde los DPF que usaremos para comunicarnos con el editor de niveles hecho en C# de nuestro grupillo PKM06, revisar la libreria Motoko por ver si se puede optimizar algo y quizas cambiar el orden de renderizado, revisar (esto es poco) el Pong32 de Harko para mejorar la suavidad con la que se mueven las raquetas y la bola.

Pero… desde mañana y hasta el proximo miercoles, me voy de vacaciones, creo que me vendra muy bien esta semana, asi volvere con mas ganas :). Parece que hoy se ha caido el server de stratos, es la revolucion de las maquinas, todas se niegan a seguir funcionando!

Bueno, añadire un par de entradas mas al blog y hasta la semana que viene!