c++ - 什么时候释放传递给 DirectX 的内存是安全的?

标签 c++ memory directx

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/

相关文章:

c++ - 捕获 boost::bad_lexical_cast 时,我可以访问要转换的字符串/标记吗?

接口(interface)中的C#静态函数

c++ - Eclipse C++ 调试在 STL 中中断

c++ - 使用 dlopen 加载派生多态类

c++ - 有不同的异常类

c++ - 我刚刚做了什么? C++中的内存泄漏?

c - C 结构的数据对齐

java - 事件方法中的线程对象 : use class member or create local object?

c# - 扩展 Windows 键盘

c# - 阻止特定 c# winforms 的桌面共享或检测桌面共享