Logo

¡Bienvenido a Stratos!

Acceder

Foros



Autogenerando Mip-maps en DX9...

Iniciado por Zaelsius, 31 de Mayo de 2003, 07:56:27 PM

« anterior - próximo »

Zaelsius

                                Tengo un problema con el autogenerado de mip-maps en DirectX 9.0, resulta que el siguiente código funciona correctamente con DirectX 8.1, pero no me funciona con DX9.0(no tengo las 9.0a).

optSize.Width = getTextureSizeFromSurfaceSize(SurfaceSize.Width);
      optSize.Height = getTextureSizeFromSurfaceSize(SurfaceSize.Height);

      HRESULT hr = Device->CreateTexture(optSize.Width, optSize.Height,
         generateMipLevels ? 0 : 1, // number of mipmaplevels (0 = automatic all)
         0, D3DFMT_A1R5G5B5, D3DPOOL_MANAGED, &Texture);

      if (Texture)
      {
         if (copyTexture() && generateMipLevels)
         {
            // create mip maps.
            hr  = D3DXFilterTexture(Texture, NULL, 0 , D3DX_DEFAULT );
            if (FAILED(hr))
               os::Warning::print("Could not create direct3d mip map levels.");
         }            
      }
      else
         os::Warning::print("Could not create DirectX8 Texture.");

He depurado mil y una veces el programa, pero la llamada a D3DXFilterTexture() falla, y me devuelve un D3DERR_INVALIDCALL, aunque los parámetros son correctos..
copyTexture() es una funcion que rellena el nivel 0 con la textura.

¿Alguna idea? He probado D3DUSAGE_AUTOGENMIPMAP en CreateTexture, pero mi tarjeta no lo soporta.
Tambien he probado a llamar a Texture->GenerateMipSubLevels, pero no hace nada..

Me mosquea que funcionase con DX8 y con DX9 no, he comprobado otros parámetros de creación por si he metido la pata al portar todo el código de DX8 a DX9, pero nada...

He conseguido rellenar manualmente los demás niveles de la cadena, pero si lo puede hacer DX9, mejor.                                

Zaelsius

                                Bueno, me autocontesto yo, que ya he arreglado el bug :-) .
El tema era que en el proyecto en el que estaba trabajando se incluían las liberias d3dx8.lib y d3dx9.lib(pq es un proyecto multi API y yo estaba añadiendo soporte dx9). Pues resulta que todas las llamadas a interfaces de direct3d9 eran válidas, menos las llamadas a funciones de D3DX, que fallaban o explotaban, sin causa aparente...

La solución ha sido incluir una pequeña macro en los fuentes para no poder compilar el proyecto con los dos drivers de DirectX, y sólo incluir la libreria adecuada mediante directivas #pragma comment..                                






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.
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.