2017-08-30 2 views
1

タイトルが言うように、私はループでCopySubresourceRegionをやっています。そこのある時点では、完了するまで待つ必要があります。 MSDNのドキュメントからはID3D11Device::CreateQueryで作成されたイベントクエリのID3D11DeviceContext::GetDataD3D11_QUERY_EVENTとの間でID3D11DeviceContext::Flushと呼ぶことができます。ID3D11DeviceContext :: CopySubresourceRegionを呼び出すループがあります。どうすればそれを待つことができますか?

私はそれを試してみた、そしてそれは、これまで私のテストで動作しているようだが、私はよくわからんだ事があります。

  1. それはループが始まる前に、私は一度だけCreateQueryを呼び出した場合、正しく動作し、各GetDataコールで繰り返し、そのクエリを使用しますか?

  2. クエリの漏洩を防ぐため、クエリを作成した後で破棄する必要がありますか? DestroyQueryメソッドがないようですので、私のID3D11Query*に無料で電話をかけますか?

  3. コピーが完了するのを待つ前に、ID3D11DeviceContext::MapまたはUnmapのいずれかの呼び出しを行うことができますが、まだフラッシュが必要ですか?

答えて

0

なぜ完了まで明示的に待機する必要がありますか? D3D11はすでに機内での使用期間中は内部でシールドされています。 Mapに電話すると、システムは完了を待つことを確認します。

通常、クエリを使用してMapを呼び出すことが安全であるかどうかを知るために、非ブロック的な方法で補完をクエリできるようにするのは、反対の動作です。

2.クエリはD3D11の他のリソースと同じように、Releaseを呼び出して破棄し、それらを再利用したり、クエリのプールを作成したり、使用時にマークしたり、 GetData

でデータを収集する
関連する問題