我有一个游戏,我需要弄清楚一个特定的问题。
当您最大化,移动窗口或调整窗口大小时,DirectX设备将重置。但在重置之前,应释放所有图形分配的对象,这些对象不属于托管池。 至于这个游戏,当应用程序退出时(从基本的directx调试库输出)似乎有30个未发布的对象,这导致我假设当设备重置时,会出现同样的问题。这会导致游戏在最大化,移动或调整窗口大小时崩溃,这显然是不可接受的。
更多的研究表明,您可以通过DirectX控制面板在DirectX中启用过多的调试,除非您有Windows 8,否则没有这样的东西可用。您可以安装DirectX sdk并打开DirectX控制面板,但Direct3D选项卡上的所有功能都显示为灰色。然后,这个过多的调试输出级别将打印出退出时尚未释放的分配地址,这可以让我知道在重置设备事件期间实际上未释放的内容。
游戏使用Visual Studio 2010中的DirectX 9库以C ++构建。 PS。默认情况下Windows 8附带DirectX SDK但没有控制面板选项,您必须手动安装DirectX SDK才能获得它。
我的问题是,如何在我的环境(Windows 8 Pro)上启用过多的directx调试? 在使用directx调试库编译时,有没有什么方法可以在源代码中为每个应用程序启用过多的调试,或者你必须使用DirectX控制面板吗?
干杯,Nicco。
答案 0 :(得分:0)
您可以通过注册表启用一些调试here
另外,我玩控制面板并发现它修改了我的(windows7)机器上的以下按键:
HKEY_CURRENT_USER\Software\Microsoft\Direct3D\ControlPanel
在控制面板中选中“使用Direct3D9的调试版本”,将“LoadDebugRuntime”注册表项设置为值1(否则为0)。
选中“Break On Memory Leak”将“BreakOnMemLeak”键设置为1。 选中“Break On D3D Error”将“BreakOnDPF”键设置为1。
请注意,这些相同的密钥也在以下位置重复:
HKEY_CURRENT_USER\Software\Microsoft\Direct3D\
因此,如果您没有安装控制面板,他们也可以在那里工作。