DirectX API 中的许多函数将数组作为指针和长度(例如 RSSetViewports
)。我看不到任何关于指针需要存活多长时间的文档 - 直到函数返回或者我是否需要让该数组保持事件状态?
更一般地说,DirectX API 是否有生命周期约定,是否在某处记录?
最佳答案
对于 DirectX 11,仅在调用中需要指向结构的指针。资源数据被复制到 DirectX COM 对象中,引用计数管理对象的生命周期。内存由驱动程序或运行时分配,是 GPU 视频内存、PCIe 孔径内存和系统内存的混合,具体取决于资源类型。关于如何将内存映射到您的虚拟内存空间还有一些额外的复杂性,但一般来说,除了让 COM 对象保持事件状态之外,您不必担心它。
XAudio2 要求您保持音频缓冲区处于事件状态,直到它们不再被使用,旧的 DirectSound API 复制音频数据,这对于 XAudio2 使用的所有基于 CPU 的混合模型来说效率较低。
对于 DirectX 12,这取决于您所谈论的内存类型,因为更多的内存生命周期由应用程序明确管理,您必须自己管理 GPU/CPU 同步。
关于c++ - 什么时候释放传递给 DirectX 的内存是安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54487449/