2

特定の問題を解決する必要があるゲームがあります。

ウィンドウを最大化、移動、またはサイズ変更すると、DirectX デバイスがリセットされます。ただし、リセットする前に、マネージド プールの一部ではないグラフィカルに割り当てられたすべてのオブジェクトを解放する必要があります。このゲームに関しては、アプリケーションが終了すると (基本的な directx デバッグ ライブラリの出力から) 30 個の未リリース オブジェクトがあるように思われるため、デバイスがリセットされたときに同じ問題が発生すると考えられます。これにより、ウィンドウを最大化、移動、またはサイズ変更すると、明らかに受け入れられないゲームがクラッシュします。

さらに調査した結果、DirectX コントロール パネルを介して DirectX で過剰なデバッグを有効にできることがわかりました。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

コントロール パネルで [Use Debug Version of 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 に答える