Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas de rendimiento

Iniciado por CoLSoN2, 23 de Enero de 2003, 02:46:23 PM

« anterior - próximo »

Mars Attacks

                                Pues ten por seguro que me verás allí, aunque no este año, ni quizás al próximo...
Por aquí tenemos la i-Party, donde la organización de desarrollo de software Aditel monta una pequeña party donde se instala y configura linux a todo aquel que lo quiera, amén de otras muchas cosillas que se suelen hacer en las partys :)
Este año está un poco chunga la cosa, no sé si la harán al final o qué...                                

x-alien

                                no leo el pais  :X9: , solo veo los telediarios, y principalmente los telediarios de mi tierra, canal sur  :X9:...

no se.. pero el aceite oliva k tu tomas es de andalucia =).
cyl no es tan agricola como extremadura y andalucia... y yo no hablaba de ayudas al agricultor... hablaba de los impuestos... pork los ordenadores de las escuelas lo pagamos con los impuestos =)  :jaja:  :jaja:  :jaja:.
si los andaluces pagamos impuestos es para k lo k pagamos se kede para mejorar nuestra tierra y no cataluña y el pais vasco, tal y como dijo el presidente de la comunidad andaluza, chavez.

salu2

pd. andalucia es un pozo sin fondos pork les roban...para otras comunidades :X9:                                
oy Grafista, no Programador, aun así programo mejor que un 'programador'

CoLSoN2

                                Vaya, como se ha animado el post ! Como decía Jack el Destripador, vayamos por partes:

Citar
el problema es natural k te pase, una tnt2 no puede mover tanto y menos sin optimizar... cuantos triangulos tienes en pantalla??  
en el primer post digo los vertices, divide por tres y ya lo tienes.

Citar
has metido la malla en vertexbuffer como D3D_MANAGED??...  
sip

Citar
tambien puedes optimizar usando esto  
Código:  

if( FAILED( m_pMesh->OptimizeInplace(D3DXMESHOPT_COMPACT | D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE,  
                       (DWORD*)m_pAdjacencyBuffer->GetBufferPointer(), NULL, NULL, NULL ) ) )  
   {  
      SAFE_RELEASE( m_pAdjacencyBuffer );  
        SAFE_RELEASE( m_pMtrlBuffer );  
      return E_FAIL;  
   }  

asi eliminas vertices innecesarios, como bien sabes si cargas modelos x, estos estan como trianglelist, por lo cual... hay mas vertices de la cuenta.  
Pero esto es un método de ID3DXMesh, no? yo uso un vertex buffer sin mas

Citar
joder los andaluces pagamos impuestos para tener contentos a los vascos y los catalanes para k no pidan independencia...
jaja, ui si, tamos tol dia pidiendo independencia XD

Citar
Utiliza vertexbuffer dinamicos (D3DUSAGE_DYNAMIC), NI SE TE OCURRA CREAR Y DESTRUIR UNO EN CADA FRAME,los creas al inicio de la fase del juego o asi, PERO NUNCA CREES Y DESTRUYAS VERTEXBUFFER CADA FRAME!!!  
oki, doki

Citar
Colson; q es eso q tiene tantos poligonos?  
un terreno :P

OFFTOPIC: lo de los ordenas del cole, es que es uno de los mas grandes de Catalunya. Tenemos 5 salas de ordenas. Hasta hoy, había una con ordenas entre 1500 y 2000 mhz (aunque tarjetas suckers TNT2), y 256RAM, otra de infografía de unos 1000-2000 (no se que tarjetas), otra de unos 400-700mhz, otra de 133-300 y otra con X86 XD
Sin embargo, hace un par de días nos llegó una nueva remesa de ordenas "cutting-edge"+ploters y demás pijaditas, hoy los estaban instalando, a ver si tienen tarjetas decentes..                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

CoLSoN2

                                Estoy mirando como usar VB dinamicos en el SDK y en un momento dice que el metodo mas rapido para crearlos y renderizarlos es:


for loop()

{

   pBuffer->Lock(...D3DLOCK_DISCARD...); //Ensures that hardware

                                         //doesn't stall by returning

                                         //a new pointer.

   Fill data (optimally 1000s of vertices/indices, no fewer) in pBuffer.

   pBuffer->Unlock()

   Change state(s).

   DrawPrimitive() or DrawIndexedPrimitive()

}


Veamos,
1) el loop(), que condicion debería tener?
2) que significa "doesn't stall by returning "?
3) Cuando dice "optimally 1000s of vertices/indices, no fewer", a cuantos 1000s se refiere ? pueden ser 98,000? :P
4) El "Change state(s)." que se supone que hace?
5) He leído que no se puede usar D3DPOOL_MANAGED con los dinamicos. uso default, pues?
6) A la hora de hacer el dev->CreateVertexBuffer, el número de vertices que alojará que pongo? el máximo que es posible que aloje?

bye                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

_Grey

                                Bueno ese ejemplo de la documentacion esta en seudo-codigo por eso ese loop() o ese Change state(s) y demas.

Las preguntas:
1) Lo que quieren decir con el loop es que rellenes el vertexbuffer lo renderizes y despues lo hagas otra vez y asi las veces que sean necesarias,basicamente lo que queria yo queria decir con:

"mejor es que llenes el vertbuffer (y el indexbuffer si lo usas tambien) con todo lo que puedas y lo dibujes, luego lo rellenas otra vez y asi.."

Es una manera de no cambiar de vertexbuffer para no bajar el rendimiento, y creeme que suele funcionar

2) Pues la verdad...... ahora no se si dice que el puntero que retorna puede ser distinto en cada llamada que hagas o todo lo contrario......diria que lo primero... :-?

3) Sencillamente miles,algunas veces se ha discutido por estos foros cual es el bloque mas grade que se pueda enviar con un resultado bueno en rendimiento, parece depender del hardware que tengas pero basicamente te lo dicen para que no vallas triangulo a triangulo, como hacian algunos en antaño! :ojo: 98000? puede ser pero si usas indexbuffer seguras necesitando 2 llamadas al DrawIndexedPrimitive() y escrivir 2 veces en el indexbuffer.

4) Los SetRenderState() que te sean necesarios antes del Draw(Indexed?)Primitive().

5) Como tu dices D3DPOOL_DEFAULT, no lo hace todo el mundo? :ojo:

6) Pues claro!  :D si piensas que almacenara 30mil pues 30mil(recuerda el punto 3 sobre lo de los 98000 vertices), y recuerda "Size of the vertex buffer, in bytes" :ojo:

Saludotes y espero que chute rapido :D                                

CoLSoN2

                               
Citar
puede ser pero si usas indexbuffer seguras necesitando 2 llamadas al DrawIndexedPrimitive() y escrivir 2 veces en el indexbuffer.  
Ya usaba index buffers antes de VB solamente, pero en el PC del cole se veían cosas raras (en el mío se veía de lujo), así que lo pasé todo a VB y ara va bien (se ve bien, pero muy lento xD).

Entonces no me ha quedado claro si 98,000 pueden entrar en un vb, o debería llenarlo y renderizar 2 o 3 veces ... mejor 2 o 3 , no?                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

BeRSeRKeR

                                En nVidia tienes documentos que hablan sobre el tema del correcto uso de los vertex buffers. El tema no es para tomárselo a broma ya que del buen uso o no de los VB dependerá el rendimiento de tu aplicación :-?

Aquí tienes uno sobre cómo utilizar los VB adecuadamente

http://developer.nvidia.com/view.asp?IO=Ef..._Vertex_Buffers

y aquí tienes unos templates para el manejo de VB & IB dinámicos y estáticos que puede que te sirvan para hacer un uso adecuado de ellos:

http://developer.nvidia.com/view.asp?IO=dynamic_vb_ib

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

Aureal

                                Bueno yo he tenido una TNT2 y queria decir que tiene mipmapping, filtro bilineal, trilineal, 32 bits de color y he ejecutado Unreal Tournamet 1 a 1024 a 32 bits de color a 30 fps en mi amd k6-3 a 400 mhz con 128 mb de ram, asi que ya os podeis hacer una idea de lo k vale este chip.

Tambien quiero hacer una aclaracion: el Unreal Tournament iba asi de rapido pq tenia los drivers originales especificos de TNT2 anteriores a los Detonator de NV k son una mierda, pq hoy mismo en el mismpo hardware el mismo juego va mas lento, a 800x600x16 va bien pero ahi ahi, y lo k estoy diciendo es usando d3d de renderizador que por aquellos entonces iba por la version 7 y por supuesto con el juego actualizado con el ultimo parche.

Una vez aclarado esto, nada mas, hasta la proxima.