标签存档: directx

ID3DXFont在设备丢失时的操作

ID3DXFont在调用ID3DXFont::DrawText时如果设备已经丢失(Lost)而没有进行处理时会导致程序奔溃。
在窗口处理 WM_SIZE 消息(最大化、最小化、改变窗口大小等)时,会造成设备丢失(Lost)。需要按如下的方法进行Reset:

1
2
3
ID3DXFont::OnLostDevice
IDirect3DDevice9::Reset
ID3DXFont::OnResetDevice

参考:http://topic.csdn.net/u/20081103/16/3ed93cfc-ad5e-4836-b792-25f3d8671231.html

为N卡的D3D程序配置PerfHUD调试工具

首先从nvidia的网站下载PerfHUD调试工具
下载链接为 http://developer.nvidia.com/object/nvperfhud_home.html

然后一路next安装,当然可以根据需要调整安装选项。

这个时候桌面上就会出现一个 “NVIDIA PerfHUD 6 Launcher” 的图标

双击以后就可以进行配置

可以将你的D3D的程序拖到桌面上的“NVIDIA PerfHUD 6 Launcher” 来启动 PerfHUD,但是有一个前提,你的D3D程序需要进行配置,下面贴上创建DirectX9设备的代码,代码来自“PerfHUD 6 Quick Tutorial”(安装完PerfHUD以后“开始”菜单中会有)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Set default settings
UINT AdapterToUse=D3DADAPTER_DEFAULT;
D3DDEVTYPE DeviceType=D3DDEVTYPE_HAL;
#if SHIPPING_VERSION
// When building a shipping version, disable PerfHUD (opt-out)
#else
// Look for 'NVIDIA PerfHUD' adapter
// If it is present, override default settings
for (UINT Adapter=0;AdapterGetAdapterCount();Adapter++)
{
    D3DADAPTER_IDENTIFIER9 Identifier;
    HRESULT Res;
    Res = g_pD3D->GetAdapterIdentifier(Adapter,0,&Identifier);
    if (strstr(Identifier.Description,"PerfHUD") != 0)
    {
        AdapterToUse=Adapter;
        DeviceType=D3DDEVTYPE_REF;
        break;
    }
}
#endif
if (FAILED(g_pD3D->CreateDevice( AdapterToUse, DeviceType, hWnd,
              D3DCREATE_HARDWARE_VERTEXPROCESSING,
              &d3dpp, &g_pd3dDevice) ) )
{
    return E_FAIL;
}

:如果使用visual stdio 来开发的话,要使用Release 配置来编译程序,否则在使用PerfHUD的时候会出错。


(这张图片同样来自于“PerfHUD 6 Quick Tutorial”)
在稍后的博文中将会写这个工具如何使用。

Update on 2010-08-13
如果使用PerfHUD出错、异常,请更新显卡驱动到最新版。