CodeSampler DX9 Full-screen initialization

D3D新手,请轻拍。

最近在学CodeSampler上的DX9范例。编译环境是VS2012。搭编译环境用了一两天,另行开文吐槽(有时间的话)。

本文讲讲Full-screen initialization里面的一个问题。

程序运行到第288行时报错:

1 g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
2                          D3DCOLOR_COLORVALUE(0.0f,1.0f,0.0f,1.0f), 1.0f, 0 );

因为g_pd3dDevice此时是空指针。

所以单步调试,发现init中有这样几行:

// Does this adapter mode support a mode of 640 x 480?
if( d3ddm.Width != 640 || d3ddm.Height != 480 )
    continue;

// Does this adapter mode support a 32-bit RGB pixel format?
if( d3ddm.Format != D3DFMT_X8R8G8B8 )
    continue;

// Does this adapter mode support a refresh rate of 75 MHz?
if( d3ddm.RefreshRate != 75 )
    continue;

d3ddm是显示器支持的模式的枚举,包括分辨率宽高,刷新率和format(暂时不知是啥)。我的显示器上一共有13种。

但是这几行检测强制要求显示器支持640X480,75MHZ的模式。

LZ的显示器没有完全符合的模式

于是在后面的代码里

if( bDesiredAdapterModeFound == false )
    {
        // TO DO: Handle lack of support for desired adapter mode...
        return;
    }

init函数直接返回了。而初始化g_pd3dDevice的代码还在后面,于是它就没被初始化了。

o(╯□╰)o这代码居然不报错而是直接return。

解决方案:上面的75改成60(即LZ的显示器支持的一种模式),运行成功。

posted @ 2013-11-23 21:05  Midnightcat  阅读(780)  评论(0编辑  收藏  举报