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

26 Octubre, 2006

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

26 Octubre, 2006

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(16×16pixels) 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!

26 Octubre, 2006

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

17 Octubre, 2006

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

17 Octubre, 2006

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!


A por la v5.0!!!

13 Septiembre, 2006

Si alguno de vosotros sigue el desarrollo de CRM32Pro, sabrá que hace un par de dias subi la v4.95 con todo el apartado de red reescrito y muy mejorado, en realidad esa versión bien podría haber sido la v5.0 pero bueno, por temas de roadmap y tal quiero hacer coincidir un cambio grande en la versión con el soporte completo a glSDL.

Por ahora, estoy investigando en varios frentes y en concreto, ahora mismo estoy probando distintos algoritmos de reescalado de surfaces enfocados a velocidad y/o calidad; seguramente agregue una entrada con estos resultados. El objetivo sería disponer de varios algoritmos para poder hacer reescalados en tiempo real con baja calidad o en modo offiline de alta calidad.

Además me interesan algoritmos de rotación de surfaces, estos seguramente no puedan ser acometidos en tiempo real pero no importa :) , el developer final estará informado de ello jeje.

Los dos algoritmos anteriores tienen un objetivo, que la clase Sprites lo soporte!. Me han hecho varias peticiones de ello y creo que ha llegado el momento de incorporarlo. Otra mejora que vendra en Sprites es algo que se me olvido…los hot spots! y para poder almacernarlos voy a tener que hacer cambios en la estructura y por consiguiente, movida por temas de compatibilidad hacia atras. Ya veré como lo soluciono, lo que esta claro, es que habrá compatibilidad con versiones anteriores.

Cuando haya terminado esto, volvere para ir mostrando el SetupProject y el estado del soporte a glSDL.

Por cierto, tambien estoy intentando(a ratos) hacer un wrapper para poder utilizar CRM32Pro desde C#, pero me estoy encontrando bastantes problemas, muy a mi pesar :(

Nada más por el momento.


XOR,CRC32,MD5,Rand,UCL and BlowFish benchmarks

13 Septiembre, 2006

El otro día estaba un poco aburrido y se me ocurrió medir el rendimiento de un par de algorítmos que utilizo en CRM32Pro y en otros proyectos. Al final me puse y lo termine rápido, me costo más pulir los pequeños detalles que otra cosa y bueno, en el trabajo lo he podido probar en dos máquinas Pentium4 además de en mi portátil.

Por otro lado, he compilado con Intel C++ 9.1 y con el Visual C++ 2003 para ver las diferencias en este tipo de código y es impresionante el compilador de Intel…puff, y eso que no he utilizado varios threads para que en multiprocesadores la cosa vuele!. He de puntualizar que los algoritmos CRC32, BlowFish y el Rand no standard de las librerías de C…solo los he probado con el Visual C++ 2003 pero seguro que también se nota una ganancia en rendimiento.

Por último y antes de pasar a los resultados, hay que aclarar en que estan las medidas… pues bien, el primer grupo son en MegaBytes por segundo y el segundo en ejecuciones por segundo.

Quizás alguien se pregunte con que cantidad de datos o durante cuanto tiempo… pues bien, son 10 grupos de pruebas, el más pequeño son 64bytes y el más grande 10Megabytes y cada prueba son 2 segundos para no hacerlo eterno.


Leer el resto de esta entrada »


El comienzo de una nueva era…

13 Septiembre, 2006

Teniendo en cuenta la fiebre “bloggera” que nos invade en estos tiempos y que muchos de mis inventos son cosas pequenas y no encajan bien en mi web, he decido intentar llevar adelante este blog.

No lo actualizaré todos los días, quizas algo semanal o asi…pero espero poder colgar cosas interesantes…

Esto es todo por el momento, sólo se bienvenido a mi blog!!