Pasando D3DFMT_UNKNOWN a IDirect3DDevice9 :: CreateTexture ()
Pregunta
Me estoy preguntando algo sobre esto, si creas una textura en la memoria en DirectX con la función CreateTexture:
HRESULT CreateTexture(
UINT Width,
UINT Height,
UINT Levels,
DWORD Usage,
D3DFORMAT Format,
D3DPOOL Pool,
IDirect3DTexture9** ppTexture,
HANDLE* pSharedHandle
);
... y pase en formato D3DFMT_UNKNOWN
¿qué se supone que suceda exactamente? Si trato de obtener la superficie del primer o segundo nivel, ¿causará un error? ¿Puede fallar? ¿El dispositivo de gráficos solo elegirá un formato aleatorio de su elección? ¿Podría esto causar problemas entre diferentes modelos de tarjetas gráficas / marcas?
Solución
Acabo de probarlo y no falla, principalmente
Cuando Usage
se establece en D3DUSAGE_RENDERTARGET
o D3DUSAGE_DYNAMIC
, siempre salió como D3DFMT_A8R8G8B8
, sin importar qué Lo hice en el formato de búfer trasero u otras configuraciones. No sé si eso tiene que ver con mi tarjeta gráfica o no. Supongo que especificar medios desconocidos, " pick for me " ;, y que el formato de 32 bits es más fácil para mi tarjeta.
Cuando el uso fue D3DUSAGE_DEPTHSTENCIL
, falló constantemente.
Entonces, mi mejor conclusión es que especificar D3DFMT_UNKNOWN
como el formato le da a DirectX la opción de lo que debería ser. O tal vez, siempre es por defecto el D3DFMT_A8R8G8B
.
Lamentablemente, no puedo confirmar nada de esto en ninguna documentación en ningún lugar. : |
Otros consejos
MSDN no dice . Pero estoy bastante seguro de que obtendrías " D3DERR_INVALIDCALL " como resultado.
Si el método tiene éxito, la devolución el valor es D3D_OK. Si el método falla, El valor de retorno puede ser uno de los siguiente: D3DERR_INVALIDCALL, D3DERR_OUTOFVIDEOMEMORY, E_OUTOFMEMORY.
Creo que esto cae en el " indefinido " categoría. Algunos controladores fallarán en las asignaciones, mientras que otros pueden omitir algo. Nunca he visto nada en el WDK que diga que esta condición debe ser manejada. Supongo que si habilitas el tiempo de ejecución de depuración DX verás un mensaje de error.