Hola
Estoy haciendo una aplicacion bastante sencillita con DirectX 8.1. (Direct Graphics) Habia conseguido gracias a los consejos de miembros del foro mas de 100 fps y las cosas me estaban quedando bastante bien (para estar empezando :) ) El problema es que cuando lo llevo a un ordenador mas antiguo el programa da un error. Creo q es debido a que no tiene aceleradora grafica. Lo he solucionado cambiando esta linea
Set D3DDevice = D3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, D3DWindow)
por esta otra
Set D3DDevice = D3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, D3DWindow)
El problema es que ahora los fps q consigo en ese ordenador antiguo es de 1fps :llorando:
En ese ordenador consegui mas de 100 fps usando DirectX 7.0.
¿que podria hacer para aumentar los fps?
¿Es imposible mostrar graficos en un ordenador sin aceleradora grafica a una velocidad decente?
[/quote]
Si no tiene aceleradora no puedes utilizar el HAL. Eso no lo puedes impedir.
Si, no lo utilizo. Pero es q entonces los fps pasan de 170 a 3 (en mi ordenador q si tiene aceleradora) y 1 en el otro q no la tiene. Y son fps ridiculos ¿no puedo hacer nada?
Mi aplicacion es muy sencillita y casi no deberia consumir recursos.
No, no puedes hacer nada :(
A partir de DirectX 8 ya no existe rasterizacion "rapida" por software, solo esta el "Reference Rasterizer" que es eso que usas ahora. Ese "rasterizer" como su nombre indica es de referencia (no esta hecho pensando en velocidad sino en todo lo contrario; ""calidad visual"", es decir, no han usado trucos para acelerar el rendering, solo han usado las formulas matematicas tal cual,..), solo muestra lo que deberia de aparecer en una tarjeta 3D compatible con DirectX. Digamos que esta solo para hacer pruebas, como por ejemplo probar cosas q tu hardware no soporta.
En DirectGraphics si no hay tarjeta 3D, no hay juego. Si no te vale, tendras que volver a DirectDraw :(
Buaaaaaaaaaaa
Pues menuda faena. Ya tenia muchas cosillas hechas.
A mi modo de ver los de Microsoft la han cagado. No es logico que para ejecutar una aplicacion sencillita en 2d necesites tarjeta 3d.
Tendre que volver a DirectDraw :( ya que quiero que el juego pueda ejecutarse casi en cualquier ordenador y no obligar a tener un ordenador a la ultima.
No hay alternativa?
Y usando sprites?
Aunque creas que estas trabajando en 2D, realmente estas trabajando en 3D. Y como ya te dije NO, no hay salida :(
Me temo q tendras q usar DirectDraw....
Si, sabia q estaba trabajando con 3d (aunq para hacer graficos 2d)
Pos' na volvere a Direct Draw.
Muchas gracias a contestar al post.
Pocas personas que les guste jugar al ordenador no tienen tarjeta aceleradora... vamos, yo no conozco a nadie.
Puedes pillar una medio decente (una voodoo 3) por 5000 pelas o menos de segunda mano.
No dejes Direct 3d!
:D
Yo si tengo una buena tarjeta y el motorcillo q estoy haciendo me va genial, el problema es en el ordenador de un colega q esta colaborando conmigo haciendo los graficos y el argumento q no tiene tarjeta 3D. Y me gustaria que el fuera viendo los progresos q se van produciendo. Vive lejos asi q no existe la posibilidad de q los viera en mi casa.
¿q ventajas tiene trabajar con direct 3D para hacer graficos en 2D?
Basicamente efectos de transparencia, tinte, rotaciones.... por hardware (osea rapidos y faciles).
En DirectDraw aparte del colorkey y el "zoom"... poco mas te va ha hacer el solito...
Por casualidad no se tratara de una voodoo o una de esas tarjetas que no tienen 2D y hay que usarlas conjuntamente??.... por que se arreglaria cambiando el primer parametro.
No se que tarjeta es, pero es bastante vieja.
¿a q te refieres con cambiando el primer parametro?
¿Se pueden combinar direct Draw con Direct Graphics? Si es asi podria dibujar la mayoria de las partes con direct Draw y usar Direct Graphics solo par aquellas partes en las q el Direct Draw no sirva. Quiza luego sea un poco follon ¿no?
Creo q _Grey se referia a cambiar D3DADAPTER_DEFAULT.
Algunas tarjetas 3D viejas eran solo tarjetas 3D (no tenian soporte 2D), por lo tanto era necesario tener ademas de esa tarjeta una tarjeta 2D. Si ese fuera el caso (2 tarjetas; una 3D y otra 2D), D3DADAPTER_DEFAULT haria referencia a la tarjeta 2D. Por esto _Grey comentaba que si tu amigo tiene una tarjeta SOLO 3D, tendrias que cambiar ese parametro para que funcionara.
En cuanto a lo de mezclar DirectGraphics y DirectDraw.... Q YO SEPA no se puede.
Pues eso, lo que dice Lord Trancos.
con GetAdapterCount() podras mirar cuantos "adaptadores"(targetas) tienes en el sistema,con GetAdapterIdentifier() la informacion del adaptador, GetAdapterModeCount() la cantidad de modos graficos de esa targeta,EnumAdapterModes() te enumerara los modos graficos, existen otras pero para empezar ya tienes que mirar...
como me imagino que esto es un toston podrias cambiar el "D3DADAPTER_DEFAULT" por un "1", si tu colega tiene esa comfiguracion de 2 targetas, lo mas probable es que la primera(0) sea la 2D y la segunda(1) la 3D..... y igual funciona directamente, pero si el problema es este, te tendras que currar una ventanita de SETUP para controlar la configuracion.
chao.
Muchas gracias a ambos :D . Probare lo q decis.
He probado lo q deciais y no funciona, solo debe tener una tarjeta.
Volvere a DirectX 7.0 :( snif, snif