什么时候可以安全释放我传递给DirectX的内存?

时间:2019-02-01 21:36:12

标签: c++ memory directx

DirectX API中的许多函数都将数组作为指针和长度(例如RSSetViewports)。我看不到任何有关指针需要保留多长时间的文档-直到函数返回或我需要使该数组保持活动状态?

更一般的说,DirectX API是否存在生命周期约定,并且在某个地方有记录吗?

1 个答案:

答案 0 :(得分:0)

使用DirectX 11时,仅在调用内需要指向结构的指针。资源数据被复制到DirectX COM对象中,而引用计数则管理对象的生存期。内存由驱动程序或运行时分配,并且取决于资源类型,它是GPU视频内存,PCIe光圈内存和系统内存的混合。有关如何在虚拟内存空间中映射内存还有一些其他复杂性,但是总的来说,除了使COM对象保持活动状态外,您不必担心。

XAudio2要求您保持音频缓冲区处于活动状态,直到不再使用它们为止,较早的DirectSound API复制了音频数据,这对于XAudio2使用的所有基于CPU的混合模型而言效率较低。

对于DirectX 12,这取决于您正在谈论的内存类型,因为更多的内存寿命由应用程序显式管理,并且您必须自己管理GPU / CPU同步。