2

我有一个游戏,我需要找出一个特定的问题。

当您最大化、移动或调整窗口大小时,DirectX 设备会重置。但在它重置之前,所有图形分配的对象都应该被释放,而不是托管池的一部分。至于这个游戏,当应用程序退出时(来自基本的 directx 调试库输出)似乎有 30 个未发布的对象,这让我假设当设备重置时,会发生同样的问题。当您最大化、移动或调整窗口大小时,这会导致游戏崩溃,这显然是不可接受的。

更多研究表明,您可以通过 DirectX 控制面板在 DirectX 中启用过度调试,除非您有 Windows 8,否则没有这样的功能可用。您可以安装 DirectX sdk 并打开 DirectX 控制面板,但 Direct3D 选项卡上的所有功能都是灰色的。然后,这种过高的调试输出级别将打印出退出时尚未释放的分配地址,这可以让我了解在重置设备事件期间实际未释放的内容。

该游戏是使用带有 Visual Studio 2010 的 DirectX 9 库在 C++ 中构建的。Windows 8 默认带有 DirectX SDK,但没有控制面板选项,您必须手动安装 DirectX SDK 才能获得它。

我的问题是,如何在我的环境(Windows 8 Pro)上启用过多的 directx 调试?在使用 Directx 调试库编译时,是否有任何方法可以潜在地启用源中每个应用程序的过度调试,或者您必须为此使用 DirectX 控制面板?

干杯,尼科。

4

1 回答 1

0

您可以通过此处提到的注册表启用一些调试

另外,我玩弄了控制面板,发现它修改了我(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\

因此,如果您没有安装控制面板,它们也可以在那里工作。

于 2013-02-14T22:37:29.510 回答