D3DFMT_UNKNOWNをIDirect3DDevice9 :: CreateTexture()に渡す
質問
CreateTexture関数を使用してDirectXのメモリにテクスチャを作成する場合、これについてちょっと疑問に思います:
HRESULT CreateTexture(
UINT Width,
UINT Height,
UINT Levels,
DWORD Usage,
D3DFORMAT Format,
D3DPOOL Pool,
IDirect3DTexture9** ppTexture,
HANDLE* pSharedHandle
);
...そして D3DFMT_UNKNOWN
形式で渡すと、正確に何が起こるはずですか?最初または2番目のレベルの表面を取得しようとすると、エラーが発生しますか?失敗することはありますか?グラフィックスデバイスは、ランダムな形式を選択するだけですか?これにより、異なるグラフィックカードモデル/ブランド間で問題が発生する可能性がありますか?
解決
試してみたところ、ほとんど失敗しませんでしたが、ほとんど
使用法
が D3DUSAGE_RENDERTARGET
または D3DUSAGE_DYNAMIC
に設定されている場合、どのような場合でも一貫して D3DFMT_A8R8G8B8
として出力されましたバックバッファ形式またはその他の設定を行いました。それが私のグラフィックスカードに関係しているかどうかはわかりません。私の推測では、不明な手段を指定することは、「私のために選ぶ」ことであり、32ビット形式が私のカードにとって最も簡単だということです。
使用法が D3DUSAGE_DEPTHSTENCIL
の場合、一貫して失敗しました。
だから、私の最良の結論は、 D3DFMT_UNKNOWN
を形式として指定すると、DirectXがどうあるべきかを選択できるということです。または、おそらく常にデフォルトの D3DFMT_A8R8G8B
になります。
残念ながら、どこのドキュメントでもこれを確認することはできません。 :|
他のヒント
MSDN が言っていません。ただし、「D3DERR_INVALIDCALL」というメッセージが表示されると確信しています。結果として。
メソッドが成功した場合、リターン 値はD3D_OKです。メソッドが失敗した場合、 戻り値は次のいずれかです。 次:D3DERR_INVALIDCALL、 D3DERR_OUTOFVIDEOMEMORY、 E_OUTOFMEMORY。
これは「未定義」に該当すると思います。カテゴリー。一部のドライバは割り当てに失敗しますが、他のドライバはデフォルトに設定される場合があります。この状態を処理する必要があると言うWDKの内容を見たことはありません。デバッグDXランタイムを有効にすると、エラーメッセージが表示されると思います。