gpt4 book ai didi

c++ - 我有一个调用 ID3D11DeviceContext::CopySubresourceRegion 的循环。我怎么能强制等待呢?

转载 作者:太空宇宙 更新时间:2023-11-04 12:57:19 28 4
gpt4 key购买 nike

正如标题所说,我在循环中执行 CopySubresourceRegion,在某个时候我需要强制等待直到它完成。从 MSDN 的文档来看,我似乎可以调用 ID3D11DeviceContext::Flush,然后调用 ID3D11DeviceContext::GetDataID3D11Device::CreateQuery 创建的事件查询> 使用 D3D11_QUERY_EVENT

我已经尝试过了,到目前为止它似乎在我的测试中起作用,但有些事情我不确定。

  1. 如果我在循环开始之前只调用一次 CreateQuery 并在每次 GetData 调用中重复使用该查询,它会正常工作吗?

  2. 我应该在创建查询后销毁它以防止泄漏查询吗?似乎没有DestroyQuery 方法,所以也许可以在我的ID3D11Query* 上免费调用?

  3. 如果我可以在需要等待复制完成之前调用 ID3D11DeviceContext::Map 或 Unmap,我还需要 Flush 吗?

最佳答案

为什么需要显式等待完成? D3D11 已经在飞行中使用的整个生命周期内进行了内部屏蔽。如果您调用 Map,系统会确保为您等待完成。

通常这是我们想要的相反的行为,能够以非阻塞的方式查询完成,以知道何时可以安全地调用 Map,通过使用查询。

对于 2. 查询就像 D3D11 中的任何其他资源一样,您可以通过调用 Release 销毁它们,您可以重用它们,创建一个查询池,在使用时将它们标记为已使用,然后将它们标记为可用再次使用 GetData

收集数据

关于c++ - 我有一个调用 ID3D11DeviceContext::CopySubresourceRegion 的循环。我怎么能强制等待呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45950352/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com