Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Vertex array ? complied_vertex_array ? combiner_registers ?

Iniciado por Vanch, 29 de Marzo de 2003, 04:59:05 AM

« anterior - próximo »

Vanch

                                Vertex array ? complied_vertex_array ? combiner_registers ?

¿alguien arroja un poco de luz sobre mi ignorancia sobre estos temas ?

Gracias                                
anch!!! Vanch!!!, don't let me alone.

jal

                                Probablemente no todo lo que te diga sea cierto, pero si no me equivoco, los vertex array y los compiled_vertex_array son metodos que te permiten enviar la geometry de forma empaquetada, de esta manera optimizas el uso del bus ya que permite enviar de forma más eficiente y más rapida. compiled_vertex_array debe ser algun tipo de variante de los vertex_array que te permitirá algun tipo de optimización (quizas forzar a dejar la geometry en la memoria de video).

Los register_combiners (y no combiner_register), te permiten tener un mayor control sobre el tratamiento del color en la etapa de raterización, te permite realizar efectos como bump mapping. Por decirlo de alguna forma serian la versión prehistorica de lo que ahora se conoce como pixel shaders.

Seguramente de todo lo dicho anteriormente mucho no será del todo correcto pero creo que almenos serviran para hacerte una idea.

Un saludo                                

ethernet


Vanch

                                Gracias a ambos. Alguna codigo fuente que se vea como los utilizan para empezar a trabajar ?

Un saludo.                                
anch!!! Vanch!!!, don't let me alone.

Degiik

                                No sabia lo que era complide_vertex_array antes de este mensaje. Y despues de buscar no se si me han quedado las ideas claras. Corregirme si me equivoco.

compiled_vertex_array deja los vertices y los indices de vertices en memoria ( fast memory ? ) , para evitarse el envio de los mismos. Las funciones de trabajo son:

void LockArraysEXT (int first, sizei count)

void UnlockArraysEXT (void)

duda: ¿ Como se llamar a los datos bloqueados en memoria ?

tb comentar que me parece haber leido que los datos se almacenaban en fast memory ( memoria de video ).

Una saludote.                                
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

MA]Mestre

                                La extension compiled_vertex_array aporta las funciones glLockArrays y glUnlockArrays que bloquean/desbloquean en memoria los datos de las llamdas a las funciones glDrawArrays(), glArrayElement(), glDrawElements().

glLockArrays... ( se bloquean )
  glDrawElements ...
  glDrawElements ...
glUnlockArrays... ( se desbloquean )


Desde que se bloquea hasta que se desbloquea, cualquier vertice que se tenga que calcular por segunda vez, se reusaran los calculos del primero ( transformaciones, iluminación... ).

Espero que sea de ayuda.
a10.

P.D: Degiik peazo cantidad de mensajes llevas xD                                

ethernet

Creo q la clave de compiled vertex array esta en q al indicarle q vertices bloqueamos puede enviar a la memoria de la tarjeta esos vertices y poder trabajar con ellos mas rapidamente. Es un metodo parecido a las display list pero para sistemas en los q la maya pueda estar sometida a cambios (deformable por ejemplo). nvidia recomienda usar display list antes de compiled vertex array como es logico, asi q si puedes usar display list ... USALAS ! XD

saludos

MA]Mestre

                               
CitarCreo q la clave de compiled vertex array esta en q al indicarle q vertices bloqueamos puede enviar a la memoria de la tarjeta esos vertices y poder trabajar con ellos mas rapidamente.


Hi,

Los Display List almacenana un grupo de comandos OpenGL, quedan precompilados, optimizados por el driver y almacenados en memoria. Despues con una llamada a glCallList se ejecutan los comando precompilados. glCallList es llamada obviamente desde la funcion Render y la creación de la lista fuera. Con los compiled vertex array eso no es así, durante el render se bloquean los vertices en memoria de comandos como glDrawArrays(), glArrayElement(), glDrawElements() para que se puedan aprovechar los calculos de vertices comunes. Seguidamente se desbloquean.

Citar...nvidia recomienda usar display list antes de compiled vertex array como es logico...

Otra cosa será ¿que puede resultar más óptimo?, si bien utilizar listas o compiled vertex arrays. Supongo que cada uno tendra su momento a no ser que nvidia en su implementacion de las display list realice un reaprovechamiento de informacion de vertices comunes en la llamada de glCallList .Me gustaria, si te acuerdas, de la referencia de donde leiste que nvidia recomendaba usar list antes de compiled vertex array.

a10.                                

ethernet

www.nvidia.com

hay un pdf dond e explican con q se obtiene el mejor rendimiento y no depende, display list es _siempre_ mas optimo q compiled vertex arrays.

saludos

MA]Mestre

                               
Citardisplay list es _siempre_ mas optimo q compiled vertex arrays

ethernet una afirmación tan rotunda exige una url mas precisa xDDDD. He buscado por la web de nvidia pero no lo vi, no es que desconfie de tus palabras pero me gustaria leerlo de primera mano.

a10.
P.D: Ayer te busque por irc para preguntartelo pero no te vi. Así que lo dejo aquí.                                

Aureal

 Si realmente quereis saberlo os recomiendo que os bajeis el programa oglbench de esta pagina: http://www.tweak.dk/blandede.php mirad en la lista y buscadlo. Descargaoslo y probadlo en buestro pc. Asi sabreis que sistema de renderizado os va mejor  :D y sabreis realmente que os interesa mas en cada caso.

Lo que si esta claro es que si teneis un microprocesador muy potente lo interesante son las display list. Si buestro micro no es muy rapido os interesa mas o los vertex array range o los compiled vertex array :?

toni

 Usad VBO q para eso estan :)

Ahora en serio, funcionan muy bien y muy rapido para meshes "grandes" (de 600 vertices o mas).
Esto es debido a q con meshes pequeñas se pasa más rato canviando de estado y toda la pesca que dibujando en si.

Además, son extremadamente fáciles de utilizar y dan un muy buen rendimiento (+100 fps solo pro aplicarlos, y eso q tenia muchas meshes pequeñas (de 24 vertices)).

Con VBO se puede fácilmente llegar a dibujar 20Mtris/sec en una GF4400.

Enga

Tag
ealidad Virtual: Toni At Insideo

MA]Mestre

 Aureal esta bien el test, pero me parece un poco confuso el info.txt resultante. Además depende que opciones de config selecionas simplemente revienta antes de tiempo.


Usad VBO q para eso estan
...nada tiene que ver una cosa con la otra  :blink: ... ...los compiled_vertex_arrays se pueden utilizar con VBO son complementarios no excluyentes.


P.D: Aun espero el link de ethernet con la info de nvdia donde habla del tema en cuestion, o el pdf que me prometio que me enviaria...

Storm

 Ma]Maestre: Aunque tengas ya el pdf lo pongo para los que no. Lo de usar listas viene en el documento llamado OpenGL Performance FAQ de nvidia, en la pagina viene que ha sido dado de baja para actualizarlo pero en el documento 2.0 que tengo viene que este es el orden de mayor a menor rapidez:

1. DrawElements/DrawArrays Using wglAllocateMemoryNV(size,0,0,1)
2. DrawElements/DrawArrays Using wglAllocateMemoryNV(size,0,0,.5)
3. Display Lists
4. DrawElements usingCompiled Vertex Arrays (glLockArraysEXT)
5. DrawElements and DrawArrays using Vertex Arrays with Common Data Formats
6. Immediate Mode
7. All Other Vertex Arrays

Los motivos tb vienen explicados, a quien le interese el doc que me lo pida

ethernet







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.