Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Pogacha en 16 de Junio de 2007, 02:46:52 PM

Título: To stride or not to stride?
Publicado por: Pogacha en 16 de Junio de 2007, 02:46:52 PM
Buenas, pregunto entonces a los gurus de DX ...

¿Que es mejor?
¿Usar strided o usar custom vertex formats para dibujar primitivas?
Segun mi intuicion, los customs son por comodidad y a fin de cuentas terminan haciendo lo mismo, pero cabe la posibilidad de que halla una optimización al usarlos.
El strided me viene bien para compatibilizar con OpenGL.

Target: computadoras de 6 años de antiguedad. Pentium 3 1Ghz + video de 8/16mb en DX 7.0.

Gracias por adelantado!
Título: To stride or not to stride?
Publicado por: senior wapo en 17 de Junio de 2007, 03:23:27 PM
Si usas arrays y no vertex buffers, te da igual, asi que usa strided por el parecido a opengl y la versatilidad.

La cosa cambia si quieres usar vertex buffers.

Si usas strided olvidate de usar vertex buffers en DX7 e inferior. Sus vertex buffers son todos FVF empaquetados, lo que llamas custom. Todas las primitvas usan un único buffer que por tanto ha de contener todos los componentes del vértice (posición, UV, color, normal, especular,etc...).

Si hubieses optado por basar tu motor en formatos de vértice empaquetados propios te encontrarias con que pierdes muchas de las ventajas de velocidad cuando quieras pasar a DX8+ y escenas complejas a cambio de poder usar vertex buffers en DX7.

La ventaja de tener las componentes por separado es que te permite dibujar varias versiones del modelo subiendo los datos que no cambian (casi todos excepto posición y normal) una sola vez.

Imaginate 100 soldados en pantalla, todos del mismo modelo pero en diferentes fases de animación. Todos tendrán el mismo array de coordendas de textura, mismos colores especulares por vértice (posiblemente color de vertice también si no usas lighting) y solamente cambiarán sus posiciones de vértices y normales entre una instancia del soldado y la siguiente.

Si usas vértices empaquetados tienes que subr todas las componentes (color, especular, textura...) para cada una de las copias pero si usas las componentes por separado, solo cambias (subes a la tarjeta) el vertex buffer que contiene la posición y la normal. Los otros no los cambias y posiblemente siguen en memoria de video.

La compatibilidad la desconozco.

En resumen, quieres a toda costa vertex buffers en DX7? Si la respuesta no es un SI rotundo, basa tu motor en strided y encapsula cada array como un objeto con Lock/Unlock tal que si fuese un vertex buffer real. En el futuro lo agradecerás aunque ahora tengas que subir la geometría cada vez que pintas.
Título: To stride or not to stride?
Publicado por: Pogacha en 17 de Junio de 2007, 08:43:26 PM
En realidad el tema de vertexs buffers no lo estoy usando en este momento por que la cantidad de geometria es baja, menos de 3 mil triangulos, y a las posiciones y texcoords de los vertex los calculo al vuelo por razones internas.

Muchisimas gracias!
Me lo has dejado muy claro.