Direct3D纹理资源生命周期

时间:2014-06-09 22:38:03

标签: windows-phone-8 direct3d

我一直在Windows Phone上使用Direct3D开展项目。它只是一个带有2D图形的简单游戏,我使用DirectXTK来帮助我精灵。

最近,当我在512mb仿真器上进行调试时,我遇到了内存不足错误。这个错误并不常见,是一系列打开,暂停,打开,暂停...

的结果

跟踪它,我发现每次激活应用程序时都会加载纹理,最后填满允许的内存。为了解决它,我可能会去编辑它,以便仅在打开时加载纹理,但是从挂起激活;但在这个问题之后,我对纹理资源的正确生命周期管理感到好奇。在搜索时,我遇到了自动(或#34;托管"由微软)纹理管理http://msdn.microsoft.com/en-us/library/windows/desktop/bb172341(v=vs.85).aspx。这可能有助于对视频内存中的纹理进行一些管理。

但是,我也想了解其他方法,因为我无法找到将托管纹理合并到我的代码中的好方法。

我最好调用我存储在析构函数中的ID3D11ShaderResourceView指针的Release方法以防止填满内存,但是如何确保纹理在内存中休息而其他应用程序想要使用它(内存)?

1 个答案:

答案 0 :(得分:2)

Windows手机使用Direct3D 11来虚拟化' GPU内存。基本上每个纹理都被管理了#39;如果您需要详细说明,请参阅" Why Your Windows Game Won't Run In 2,147,352,576 Bytes?"。您提供的链接是适用于Windows XP XPDM的Direct3D 9时代,而不是任何支持Direct3D 11的平台。

听起来关键问题是您的应用程序正在泄漏资源或工作集太大。您应该启用debug device并首先确保已按预期清理了所有内容。您可能还想检查您是否遵循了MSDN上启动/恢复的建议。另请注意,Direct3D 11使用延迟销毁'资源所以只是因为你所谓的发布到处并不意味着所有的资源都已经消失了......要强制完全销毁,你需要使用Flush

使用Windows Phone 8.1和Direct3D 11.2,您可以使用特定的Trim功能来减少应用程序的内存占用,但我认为这实际上不是您的问题。