之前研究过一段时间的OpenGL,可惜工作中暂时用不到,现在跑来研究一下DX,好歹工作中也可以用到一些了。
说说的我环境吧: Windows xp+sp2+DirectX9+VS2005
dx的下载安装就此略过吧。
1.新建一空的项目,把DX目录下的Include,Lib目录添加到vs2005的配置目录中;
2.引用dx头文件和lib库
3.开始来点接口调用demo。
-------------------------
#.h
#pragma comment(lib,"d3d9.lib")
void test1(LPDIRECT3D9 d3d)
{
TCHAR szBuf[512] = {0x00};
// adapter display info
D3DDISPLAYMODE d3ddm;
if (FAILED(d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
{
wsprintf(szBuf, "GetAdapterDisplayMode Failed");
::MessageBox(NULL, szBuf, "Tip", MB_OK);
return;
}
wsprintf(szBuf, "resolution=%d X %d/nrefresh rate=%d/n/D3DFORMAT=%d",
d3ddm.Width, d3ddm.Height, d3ddm.RefreshRate, d3ddm.Format);
::MessageBox(NULL, szBuf, "Tip", MB_OK);
}
void test2(LPDIRECT3D9 d3d)
{
TCHAR szBuf[512] = {0x00};
//depth buffer algorithm
if(D3D_OK != d3d->CheckDepthStencilMatch(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,D3DFMT_R5G6B5,D3DFMT_R5G6B5,D3DFMT_D16))
{
wsprintf(szBuf, "CheckDepthStencilMatch D3DADAPTER_DEFAULT failed");
MessageBox(NULL, szBuf,"Tip",MB_OK);
return ;
}
wsprintf(szBuf, "depth buffer OK");
MessageBox(NULL,szBuf,"Tip",MB_OK);
}
BOOL test()
{
LPDIRECT3D9 d3d = NULL;
TCHAR szBuf[512] = {0x00};
if(NULL == (d3d=::Direct3DCreate9(D3D_SDK_VERSION)))
{
wsprintf(szBuf, "Direct3DCreate9 Failed.");
::MessageBox(NULL,szBuf,"Tip",MB_OK);
return FALSE;
}
else
{
UINT unNum = d3d->GetAdapterCount();
wsprintf(szBuf, "Adapter Number=%d", unNum);
::MessageBox(NULL, szBuf, "Tip", MB_OK);
}
test1(d3d);
test2(d3d);
d3d->Release();
return TRUE;
};