2017-08-30 57 views
1

正如標題所說,我在一個循環中執行CopySubresourceRegion,並且在那裏我需要強制等待,直到它完成。從MSDN的文檔中,我看起來可以撥打ID3D11DeviceContext::Flush,然後ID3D11DeviceContext::GetData查詢由ID3D11Device::CreateQuery創建的事件查詢,並使用D3D11_QUERY_EVENT我有一個循環調用ID3D11DeviceContext :: CopySubresourceRegion。我該如何強制等待呢?

我已經嘗試過了,它至少在我的測試中工作,但有些事情我不確定。

  1. 難道正常工作,如果我叫CreateQuery只是一次的循環開始前,反覆使用的查詢與每個GetData電話嗎?

  2. 創建它後應該銷燬查詢以防止查詢泄漏?似乎沒有DestroyQuery方法,因此可能免費撥打我的ID3D11Query*

  3. 如果我可以調用ID3D11DeviceContext::Map或Unmap,然後我需要等待副本完成,那麼我還需要Flush嗎?

回答

0

爲什麼你需要明確的等待完成? D3D11在使用期限內已在內部屏蔽。如果您致電Map,系統一定要等待您完成。

通常情況下,我們希望能夠通過使用查詢以非阻塞的方式查詢完成情況,以確定何時可以安全地調用Map,這種行爲是相反的。

對於查詢與D3D11中的任何其他資源類似,您可以通過調用Release來銷燬它們,並且可以重新使用它們,創建查詢池,標記它們在使用時使用,然後在可以重新標記它們時再標記它們收集數據與GetData