DirectX程序例子

自己的第一个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/

posted on 2010-03-29 18:24  一路前行  阅读(601)  评论(0编辑  收藏  举报