Directx3D框架程序

来源:互联网 发布:js获取单选框选中的值 编辑:程序博客网 时间:2024/06/04 17:48

#include<windows.h>
#include<d3d9.h>

LPDIRECT3D9  g_pD3D=NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice=NULL;
HRESULT InitalizeD3D(HWND hWnd)
{
 if(NULL==(g_pD3D=Direct3DCreate9(D3D_SDK_VERSION)))
  return false;

 D3DPRESENT_PARAMETERS d3dpp;
 ZeroMemory(&d3dpp,sizeof(d3dpp));
 d3dpp.Windowed=true;
 d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
 d3dpp.BackBufferFormat=D3DFMT_UNKNOWN;

 if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,
  D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pd3dDevice)))
 {
  return false;
 }
 return true;
}

 

VOID Render()
{
 g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);
 if(SUCCEEDED(g_pd3dDevice->BeginScene()))
 {

  g_pd3dDevice->EndScene();
 }
 g_pd3dDevice->Present(NULL,NULL,NULL,NULL);
}


VOID Cleanup()
{
 if(g_pd3dDevice!=NULL)
  g_pd3dDevice->Release();

 if(g_pD3D!=NULL)
  g_pD3D->Release();
}

 


LRESULT WINAPI MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParm)
{
 switch(msg)
 {
 case WM_DESTROY:
  Cleanup();
  PostQuitMessage(0);
  return 0;
 case WM_PAINT:
  Render();
  ValidateRect(hWnd,NULL);
  return 0;
 }

 return DefWindowProc(hWnd,msg,wParam,lParm);
}

 

INT WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,INT)
{
 WNDCLASSEX wc={sizeof(WNDCLASSEX),CS_CLASSDC,
            MsgProc,0L,0L,GetModuleHandle(NULL),NULL,NULL,
      NULL,NULL,L"ClassName",NULL};

 RegisterClassEx(&wc);

 HWND hWnd=CreateWindow(L"ClassName",
                    L"Directx9游戏编程第三章Win32框架",
        WS_OVERLAPPEDWINDOW,200,100,600,500,
        NULL,NULL,wc.hInstance,NULL);

 if(SUCCEEDED(InitalizeD3D(hWnd)))
 {
  ShowWindow(hWnd,SW_SHOWDEFAULT);
  UpdateWindow(hWnd);

  MSG msg;
  ZeroMemory(&msg,sizeof(msg));

  while(msg.message!=WM_QUIT)
  {
   if(PeekMessage(&msg,NULL,0U,0U,PM_REMOVE))
   {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
   }
   else
   {
    Render();
   }
  }
 }

 

UnregisterClass(L"ClassName",NULL);
return 0;
}