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的显示器支持的一种模式),运行成功。