1

CreateTexture関数を使用してDirectXのメモリにテクスチャを作成する場合、これについてはちょっと疑問に思います。

HRESULT CreateTexture(
  UINT Width,
  UINT Height,
  UINT Levels,
  DWORD Usage,
  D3DFORMAT Format,
  D3DPOOL Pool,
  IDirect3DTexture9** ppTexture,
  HANDLE* pSharedHandle
);

...そして、D3DFMT_UNKNOWN正確に何が起こると思われるかをフォーマットで渡しますか?第1レベルまたは第2レベルの表面を取得しようとすると、エラーが発生しますか?失敗することはありますか?グラフィックデバイスは、選択したランダムな形式を選択するだけですか?これにより、異なるグラフィックカードモデル/ブランド間で問題が発生する可能性がありますか?

4

3 に答える 3

2

試してみましたが、ほとんど失敗しません。

をまたはにUsage設定すると、バックバッファ形式やその他の設定に何をしたかに関係なく、一貫してとして出力されます。それが私のグラフィックカードに関係しているかどうかはわかりません。私の推測では、不明なものを指定することは「私のために選んでください」という意味であり、32ビット形式が私のカードにとって最も簡単であると思います。D3DUSAGE_RENDERTARGETD3DUSAGE_DYNAMICD3DFMT_A8R8G8B8

使用法があったときD3DUSAGE_DEPTHSTENCIL、それは一貫して失敗しました。

したがって、私の最善の結論はD3DFMT_UNKNOWN、フォーマットとして指定することで、DirectXにそれがどうあるべきかを選択できるということです。または、常にデフォルトでD3DFMT_A8R8G8B

悲しいことに、私はどこのドキュメントでもこれを確認することはできません。:|

于 2009-07-30T05:07:30.273 に答える
0

これは「未定義」のカテゴリに分類されると思います。一部のドライバーは割り当てに失敗しますが、他のドライバーはデフォルトで何かに失敗する可能性があります。この状態を処理する必要があるというWDKの内容は見たことがありません。デバッグDXランタイムを有効にすると、エラーメッセージが表示されると思います。

于 2009-07-30T15:08:29.387 に答える
0

MSDNは言いません。しかし、結果として「D3DERR_INVALIDCALL」が表示されると確信しています。

メソッドが成功した場合、戻り値はD3D_OKです。メソッドが失敗した場合、戻り値は次のいずれかになります:D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY。

于 2009-07-30T04:47:49.870 に答える