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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top