Stratos: Punto de Encuentro de Desarrolladores

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