プログラミング ID3D11Debug::ReportLiveDeviceObjectを知った
あいさつ
どうも、はかせです。
今回はデバッグしてくうちにしった便利メソッドの紹介です。
ID3D11Debug::ReportLiveDeviceObjectとは
詳しくはこちらで
docs.microsoft.com
簡単に言うとDirectXのCOMオブジェクトのRelese忘れを教えてくれるものです。
使うコードです。
#include <dxgidebug.h> ComPtr<ID3D11Device> mDevice; ComPtr<ID3D11Debug> mD3dDebug; //デバッグレイヤー設定 flags = D3D11_CREATE_DEVICE_DEBUG; hr = D3D11CreateDeviceAndSwapChain (NULL,driverType,NULL,flags,&fLevel,1,D3D11_SDK_VERSION,&sd,&mSwapChain,&mDevice,NULL,&mDeviceContext); //作成 mDevice->QueryInterface(__uuidof(ID3D11Debug), reinterpret_cast<void**>(mD3dDebug.GetAddressOf())); //使う mD3dDebug->ReportLiveDeviceObjects(D3D11_RLDO_SUMMARY); mD3dDebug->ReportLiveDeviceObjects(D3D11_RLDO_DETAIL);
普通のCOMと大して使い方は変わりません。
普通に作って、普通に使います。
ただID3D11Deviceを作成する際にデバッグレイヤーを設定しておかないと
使えませんので気を付けてください。
そしてもう一つ。
ReportLiveDeviceObjectsメソッドは
呼んだタイミングでのCOMオブジェクトの生存状況を教えてくれます。
どう使うかはあなた次第ってことですね。
さて、では実際に使った時の表示を見てみましょう。
ReportLiveDeviceObjectsの引数に渡すものによって表示が変わります。
まずD3D11_RLDO_SUMMARYの時です。
次にD3D11_RLDO_DETAILの時です。
SUMMARYの時は何が何個あるみたいな全体の状態を、
DETAILの時はそれぞれが何なのか詳しく教えてくれる感じです。
ちなみに私の殲滅対象は・・・
多いな_( _´ω`)_ツライム
あとがき
今回はReportLiveDeviceObjectの紹介でした。
なんのCOMが残ってるかわかるだけでもいいですよね。
私はわかっても、
なんで解放されていないのか解明しきれてないですがw
下手したら頭から探すか、ほぼ全部組みなおすか、
そんな感じの大改修をするかもしれません(´;ω;`)
まぁそうなったらそうなったですねw(開き直り)
それでは今回はこの辺でノシ