Foros - Stratos

Stratos => XNA => Mensaje iniciado por: XÑA en 04 de Septiembre de 2010, 08:16:12 PM

Título: Como mejorar el dibujado de sprites
Publicado por: XÑA en 04 de Septiembre de 2010, 08:16:12 PM
Estaba pensando en cómo mejorar la clase SpriteBatch.
Esta clase lo que hace es dibujar toda la lista que hay entre el Begin y el End, ordenando por una série de parámetros, como la transparencia o la Z.
Sin embargo, si utilizas varios niveles de SpriteBatch, la clase falla, puesto que no se da cuenta de que otro spriteBatch te ha cambiado los states. Así si por ejemplo haces esto:

foreach(RenderTarget)
sBatch.Begin
....
   foreach(...)
    sBatch2.Begin
     ...
    sBatch2.End
....
sBatch.End

No funciona bien.  :(

Así que he pensado que lo único que habría que hacer es una clase SpriteBatch con 'memoria de states'. De esta forma no necesita Begin, no necesita End, sólo necesita un Render y listos.

Pero ahora XNA 4.0 lo cambia todo:

http://blogs.msdn.com/b/shawnhar/archive/2010/04/02/state-objects-in-xna-game-studio-4-0.aspx

Ahora se usará el sistema de DX10, que a mi no me gusta en absoluto  >:(

Así que en 4.0 se necesitará utilizar una lista de states, comprobar si ya existe, si no existe, crearlo....

Para que el sistema sea óptimo se necesita una tabla Hash que identifique cada state...

¿Conocéis un sistema rápido y óptimo que cree un hash a partir de una estructura de varios int32?
Título: Re: Como mejorar el dibujado de sprites
Publicado por: blau en 05 de Septiembre de 2010, 01:53:46 AM
Quitando el modo inmediate,
en los demas modos se pinta cuando haces el spriteBatch.End(),
me imagino que es ahi donde puedes cambiar los rendersates, aunque no lo he probado.

Título: Re: Como mejorar el dibujado de sprites
Publicado por: Vicente en 05 de Septiembre de 2010, 09:33:50 PM
Calcular códigos hash "bien" es muy complicado, lo más posible es que la líes y no sea suficientemente único :S