自己的第一个DX程序,开始学习的第一步
#include<d3d9.h>
LPDIRECT3D9 g_pD3D ;
LPDIRECT3DDEVICE9 g_pd3dDevice ;
HRESULT InitD3D(HWND hWnd)
{
if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
{
return E_FAIL;
}
D3DPRESENT_PARAMETERS d3dpp ;//创建设备结构体
ZeroMemory(&d3dpp , sizeof(d3dpp));
d3dpp.Windowed = TRUE ;//创建窗口模式
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD ;//最有效的SWAP效果
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;//建立一个与当前模式相匹配的后置缓冲
if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT ,
D3DDEVTYPE_HAL , hWnd ,
D3DCREATE_SOFTWARE_VERTEXPROCESSING ,
&d3dpp ,
&g_pd3dDevice)))
{
return E_FAIL;
}
return S_OK;
}
VOID Cleanup()
{
if(g_pd3dDevice != NULL)
{
g_pd3dDevice->Release();
}
if(g_pD3D != NULL)
{
g_pD3D->Release();
}
}
VOID Render()
{
if(NULL == g_pd3dDevice)
{
return ;
}
//将后置缓冲清除 ,同时设置为蓝色
g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,255),1.0f,0);
if(SUCCEEDED(g_pd3dDevice->BeginScene()))
{
//实际渲染命令栏
g_pd3dDevice->EndScene();
}
g_pd3dDevice->Present(NULL , NULL , NULL , NULL);
}
LRESULT WINAPI MsgProc(HWND hWnd , UINT msg , WPARAM wParam , LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
Cleanup();
PostQuitMessage(0);
return 0;
case WM_PAINT:
Render();
ValidateRect(hWnd , NULL);
return 0;
}
return DefWindowProc(hWnd , msg , wParam , lParam);
}
INT WINAPI WinMain(HINSTANCE hInst , HINSTANCE , LPSTR , INT)
{
WNDCLASSEX wc = {
sizeof(WNDCLASSEX),CS_CLASSDC , MsgProc , 0L , 0L ,
GetModuleHandle(NULL) , NULL , NULL , NULL , NULL ,
"D3D Tutorial" , NULL
};
RegisterClassEx(&wc);
HWND hWnd = CreateWindow(
"D3D Tutorial" , "D3D Tutorial01 : CreateDevice" ,
WS_OVERLAPPEDWINDOW , 100 , 100 , 300 , 300 ,
GetDesktopWindow() , NULL , wc.hInstance , NULL);
if(SUCCEEDED(InitD3D(hWnd)))
{
ShowWindow(hWnd , SW_SHOWDEFAULT);
UpdateWindow(hWnd);
MSG msg ;
while(GetMessage(&msg , NULL , 0 , 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
UnregisterClass("D3D Tutorial" , wc.hInstance);
return 0;
}
转自:http://zhouweigang01.blog.163.com/blog/static/934090720079289345651/