Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Primitivas Gráficas D3d

Iniciado por Loover, 17 de Diciembre de 2004, 03:34:36 PM

« anterior - próximo »

Loover

 Pues la verdad es que no va tan lento. Aún con un DrawPrimitiveUp para cada primitiva obtengo estos 105 fps (con antialiasing). Sin él unos 185 fps.

Y eso que son un porrón, pero oye, un porronazo de líneas y circunferencias (o polígonos muy redondeados Grey, xDD) de ¡¡¡¡70!!! caras cada uno.




Cuándo use un único vertex buffer, el index buffer  y una única llamada a DrawIndexedPrimitive veremos a ver a cuantos se dispara :) Y un clipping trivial de líneas que queden fuera del ViewPort tampoco vendría mal.

Ya pondré otra captura con la diferencia de fps :)

PD: ¡Berserker muy bonita la captura!
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Loover

  <_<  Ummmm

Pues contra todo pronóstico... va más lento. 5 fps más lento usando un DrawIndexedPrimitive, un único VertexBuffer, un único IndexBuffer y una única llamada a DrawIndexedPrimitive.

Eso sí, el código es ahora dos veces más complejo :P

No lo entiendo, según vuestros consejos debería ir más rápido. ¿No?

No sé si estaré haciendo algo mal. La imagen se pinta perfectamente. Al crear los buffers utilizo los flags D3DUSAGE_WRITEONLY y D3DPOOL_MANAGED.

Solo lockeo una vez por frame.

¡Espero vuestras respuestas! :)
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

_Grey

 Me has dejado asi.... O_O

Prueba con D3DPOOL_DEFAULT y D3DPOOL_SYSTEMMEM.

Los buffers son inecesariamente grandes?? si es asi, cuando "loqueas" lo haces al completo? La targeta es "muy antigua"??

No se que pensar, mira las 2 opciones primeras que nombro, a ver si hay suerte.....

Ahora que me fijo, no lo nombras..... cuando creas el VertexBuffer usas el flag D3DUSAGE_DYNAMIC???Este punto puede ser algo importante.

Cuando "Lockeas" , usa D3DLOCK_DISCARD.

Saludos.

Loover

 Esto es lo que hago en la inicialización

// Inicializamos el buffer de vértices de primitivas (luego se volcará sobre el vertex buffer)
mPrimitiveVertices = new PIXEL [20240];

// Creamos el VB
mInfo.mDevice->CreateVertexBuffer  (sizeof (PIXEL) * 20240,
          D3DUSAGE_DYNAMIC,
          D3DFVF_PIXEL,
          D3DPOOL_SYSTEMMEM,
          &mPrimitiveVB,
          0);


// Inicializamos el indice de primitivas (luego se volcará sobre el index buffer)
mPrimitiveIndex = new WORD [20240];

// Inicializa el objeto D3D IndexBuffer para las primitivas
mInfo.mDevice->CreateIndexBuffer  (20240 * sizeof (WORD),
          D3DUSAGE_DYNAMIC,
          D3DFMT_INDEX16,
          D3DPOOL_SYSTEMMEM,
          &mD3DPrimitiveIB,
          0);


Si los creo con D3DPOOL_DEFAULT obtengo los mismos FPS.

Ahora, con los flags que me has recomendado, vuelve a dar 105 fps. Es decir, exactamente, pero CLAVADO los mismos fps que haciendo una llamada a DrawPrimitiveUp cada vez.

Los dos buffers son justitos justitos para que quepan las primitivas del render. Solo lockeo lo que debo en cada uno de ellos. Y utilizo  D3DLOCK_DISCARD.

Tengo una Radeon 7200 64MB
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

_Grey

 viendo este codigo realmente poco puedo decir, estoy fuera de juego.

Solo puedo pensar que con mas vertices iria mas rapido, que lo dudo, o que con una tageta mas moderna si tiraria mas rapido, esto es mas posible.

Quiza seria bueno que pudieramos testear el programa en cada una de sus dos versiones para ver si se gana con hardware mayor.

Podria ser el "lockeo" pero si lo haces como dices no.....

Me inclino por lo del hardware, en ningun caso te recomendaria DrawPrimitiveUp en lugar de DrawPrimitive o DrawIndexPrimitive.Puede que te toque la moral, pero y si lo hicieras sin IndexBuffer??

Si es posible probar las 2 versiones en maquinas de gente del foro mejor, me extraña y podria ser que la antiguedad del hardware no "aprobeche" esto y por eso no lo notes, que te parece??

Saludos.

BeRSeRKeR

 Bueno a mí no me sorprende demasiado. No es la primera vez que veo que el rendimiento de la versión "UP" de Draw*Primitive es similar a la otra. Por eso a veces no me complico y paso de utilizar vertex & index buffers.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Loover

 Bueno pues dicho y hecho.

Aquí podeis descargar ambas pruebas: http://loover.webcindario.com/pruebaPrimitives.zip

Quedaré muy agradecido a todo aquel que las pruebe y ponga la diferencia de fps entre una y otra.

Un saludo!
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

BeRSeRKeR

 No me va el enlace... :)

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

_Grey


Loover

 Paciencia paciencia, que cuando se crea una web nueva en miarroba a veces tarda en hacer funcionar los enlaces. Pero el enlace está bien ;) a ver si mañana rula.
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Loover

 Se lo he pasado a un par de colegas con estos resultados:


Conejillo de Indias                    MultiplesDrawPrimitiveUp           1SoloDrawIndexedPrimitive
    Salem                                               240                                                   240
    Colson                                               90                                                    100


A ver si mañana funciona el link
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

_Grey

 Me quita un peso de encima ver que a alguien le da mas con vertexbuffer's, no estaria de mas el hard3D que tienen.
Pero me incluna a seguir recomendando el uso de los vertexbuffer's aun que tu no puedas ver la diferencia.

En cuanto funcione el link lo pruebo  ;)  

Loover

 El link va bien, pero no permite acceso directo cliqueando desde otra web :S

Así que he puesto un link en la web http://loover.webcindario.com

¡Ya podeis probarlo!

IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Haddd

 Múltiples:160
1 sólo Draw:165


Loover

 Pues parece que alguna diferencia hay, pero muy poca :) A ver si puedes probarlo _Grey
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.