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