3

ReportLiveObjects 的 MSDN 页面

我不确定如何调用 ReportLiveObjects 方法,因为我试图声明的类是抽象的,或者在 IDXGIDebug“未声明”的情况下(我想我缺少头文件?)。

这是片段。

    ID3D11Debug *debugDev = new ID3D11Debug();
    debugDev->ReportLiveDeviceObjects( D3D11_RLDO_DETAIL );

上面的代码告诉我这个类是抽象的,所以我不能创建一个对象。

IDXGIDebug debugDev = new IDXGIDebug();

上面的代码告诉我 IDXGIDebug 未声明。

已包含头文件“DXGI”。调试层打开。

任何帮助,将不胜感激。

4

2 回答 2

11

当然你不能ID3D11Debug直接创建接口。

第一步是创建您的ID3D11DevicewithD3D11_CREATE_DEVICE_DEBUG标志,如下所示:

creationFlags = 0;

#ifdef _DEBUG
        creationFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif

D3D11CreateDevice(...);

然后你必须ID3D11Debug从你的设备查询接口,像这样:

m_d3dDevice->QueryInterface(__uuidof(ID3D11Debug), reinterpret_cast<void**>(&m_d3dDebug));

关于 D3D 调试层的两个有用链接:

http://msdn.microsoft.com/en-US/library/windows/desktop/jj200584(v=vs.85).aspx http://blogs.msdn.com/b/chuckw/archive/2012/11/ 30/direct3d-sdk-debug-layer-tricks.aspx

于 2013-04-05T08:30:21.257 回答
1

我不知道回答一个 8 年前的问题是否是失礼,但唯一的答案实际上并没有回答关于 的问题IDXGIDebug,所以如果其他人正在寻找这个答案:

DXGIGetDebugInterface使用orDXGIGetDebugInterface1函数创建 IDXGI 接口。DXGIGetDebugInterface1不需要 DLL,因此它应该更易于使用:

#include <windows.h>
#include <dxgidebug.h>
...
IDXGIDebug * debugDev;
HRESULT hr = DXGIGetDebugInterface1(0, IID_PPV_ARGS(&debugDev));

那应该得到IDXGIDebug实例。而不是调用ReportLiveDeviceObjectslike with ID3D11Debug,您将调用ReportLiveObjects,在原始帖子中使用 MSDN链接引用,您可以将参数替换为您喜欢的任何值(在此处此处列出):

hr = debugDev->ReportLiveObjects(DXGI_DEBUG_ALL, DXGI_DEBUG_RLO_ALL);
于 2021-02-23T08:54:46.750 回答