1

私はしばらくの間、この質問に対する答えを探していました。誰でもそれを行う方法を知っていますか?

私はいくつかのアイデアを持っています。それらが有効で、どれを使用するのが最適かを教えていただけますか (実際に適切な解決策がある場合)。

  1. 単一の directx9 デバイスを作成します。異なるスレッドのコピーを作成します。新しいレベル アセットをロードし、それらの Vertex およびインデックス バッファを作成しながら、(既にロードされたバッファを使用して) ロード画面をレンダリングします。
  2. 2 つの異なる directx9 デバイスを作成します。各スレッドに 1 つ。1 つのデバイスはレンダリングのみを担当し (ウィンドウに接続され)、もう 1 つのデバイスはレンダリング サーフェスを持たず、バッファの作成と充填を処理します。
  3. スレッドセーフフラグをつけたデバイスを作成し(そういうものもあると思いますが、このようには呼べないかもしれません)、1.と同じようにします。

ありがとう!

4

1 に答える 1

0

単純にレベルをロードしたい場合は、そのために個別のスレッドは必要ありません。たとえば、リソースの読み込み中にシーンを再描画できます。マルチスレッドなしでは生きられない場合を除き、マルチスレッドは避けることをお勧めします。

それでもマルチスレッドが必要な場合は、IDirect3D9::CreateDeviceD3DCREATE_MULTITHREADEDに渡します。DirectX SDK は、このフラグを使用するとパフォーマンスが低下する可能性があることを明示的に警告することに注意してください。

単一のデバイスを作成することをお勧めします。つまり、 #1 を使用することをお勧めします。

複数のデバイス間でリソースを共有することは可能ですが、この機能は Windows Vista でのみ使用できます。今日でも人々は WinXP を使用しているため、そのようなものを使用すると、ユーザーはあなたを嫌うでしょう。

于 2012-11-24T16:09:10.133 に答える