Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Veamos qué es lo más óptimo...

Iniciado por Drácula, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Drácula

                                mallrat, no entiendo tu test. El mio se basa en que la cpu haga algo mientras trabaja la tarjeta. Por eso si lanzas todos los triángulos al final, la CPU está a la espera constantemente.

En tu test no me estás diciendo nada.

Repetiré mi teoría:

Imagina que tienes 3 texturas para todos tus polígonos(unos 100.000), y que en total hay 10 objetos.

La técnica 1 transforma los vértices en coordenadas mundo de cada objeto(CPU intensive!!) y lanza el resultado a la tarjeta(unos 10.000 polígonos). Esto se hace para cada uno de los 10 objetos.

La técnica 2 transforma los vértices en coordenadas mundo de cada objeto y anexa el resultado a un vertex buffer asociado a la textura. Una vez procesados todos los objetos, se recorre cada textura y se manda el vertex buffer directamente(sin hacer locks ni nada por el estilo)

                               
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

mallrat

                                El test demuestra que la GPU va guardando los comandos que le envias y los va procesando segun puede. En este caso los procesa durante el Present() ya que el driver no "debe" almacenar mas de un par de frames de comandos, si no recuerdo mal.

Es resumen, demuestra la existencia de un buffer de comandos. El tema está en que tu segundo metodo deberia ser igual de rápido porque mientras pintas todos y haces el Present, supuestamente el driver volveria del Present sin hacer *nada* salvo almacenar esos comandos y mientas calculas las siguientes esferas es cuando se pintan todas las del frame anterior.

Yo creo que la diferencia entre uno y otro en tu caso está en como mandas los datos a traves del agp. De todas formas yo no usaría el segundo metodo, te dará muchos problemas si quieres luego aprovechar el T&L por HW, creeme yo hacia algo parecido y ahora no lo haría ni loco.

El que avisa no es traidor... (un poquito cabron si acaso, eso si :lengua:)


[ Este Mensaje fue editado por: mallrat el 2002-05-05 21:35 ]                                

Emotion

                                Porque no intentas hacer el proceso de envio de datos y lo que es los calculos usando multithreading? esa es la estructura basica de mi motor, y funciona bastante bien para CASI todo, y sobre todo ahora que se que puedo usar multithreading con OpenGL, tal vez puedas usar tu lo mismo, aunque depende de lo que quieras conseguir, claro esta...

De cualquier manera, y si te decides a intentarlo, te puedo pasar algo de codigo si quieres...

Un Saludo
                               
G3: Get the Power!

Drácula

                                Bien, parece que el tema tiene tomate. Yo no digo que lo que dices sea cierto, todo depende de cómo se programe ese caché.
Lo que sí quedo patente es que el 1er método es más rápido, o por lo menos la forma en la que yo lo he implementado!
Esperemos que haya más test para poder poner un poco de luz a este tema.

Respecto al comentario de Emotion, ¡qué ganas tengo de ver tu engine multithread! A mi me parece que debe complicarse todo un montón, pero...¡espero que me sorprendas! Suerte!

Gracias a todos.                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

karotida

                                En el ordenador del curro:

PII 400, 256 RAM, Windows 2000 Server
Matrox Millenium G400 DualHead

Metodo 1 -> 22.26 fps (640x499x16)
Metodo 2 -> 22.14 fps (640x499x16)                                

mac^threepixels

                                No entiendo exactamente lo que estas haciendo en lo que cuentas, pero los numeros que esta dando la gente son muy inferiores a lo que se consigue usando una GPU

La manera mas rapida de tirar poligonos con una GPU es

-Guardar los vertices en VBs estaticos
-Guardar los indices en IBs estaticos
-Tener los indices de manera que se aproveche la cache de vertices de la tarjeta (ver webs de nvidia o ati)
-Tener los vertices de manera que la lista de indices recorra ese array la manera mas lineal posible
-Tirar ristras grandes (>500) poligonos

Con eso puedes conseguir facilmente cifras de benchmark. La ultima vez que lo probe con mi motor, conseguia 20 millones de triangulos de segundo en una GF2 MX o 10 millones si usaba geometria con texturas, como unas 50 veces mas rapido de las cifras que esta posteando la gente con GForce

                               
----------------------------------
mac^threepixels
http://www.threepixels.org






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.