はかせのラボ

私の頭の中を書いていく雑記ブログです

プログラミング 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の時です。
f:id:hakase0274:20190627230256p:plain
次にD3D11_RLDO_DETAILの時です。
f:id:hakase0274:20190627230317p:plain
SUMMARYの時は何が何個あるみたいな全体の状態を、
DETAILの時はそれぞれが何なのか詳しく教えてくれる感じです。

ちなみに私の殲滅対象は・・・
f:id:hakase0274:20190627231233p:plain
多いな_( _´ω`)_ツライム

あとがき

今回はReportLiveDeviceObjectの紹介でした。
なんのCOMが残ってるかわかるだけでもいいですよね。

私はわかっても、
なんで解放されていないのか解明しきれてないですがw

下手したら頭から探すか、ほぼ全部組みなおすか、
そんな感じの大改修をするかもしれません(´;ω;`)
まぁそうなったらそうなったですねw(開き直り)

それでは今回はこの辺でノシ