Direct 3 D初期化


手順:
1.IDirect 3 D 9インタフェースポインタを取得します.このインタフェースは、物理デバイスの情報を取得し、3 Dグラフィックスを表示する物理デバイスを表すC++オブジェクトであるIDirect 3 DDevice 9インタフェースを作成するために使用されます.
2.デバイス機能(D 3 DCAPS 9)を確認し、メイングラフィックスカードがハードウェア頂点処理をサポートしているかどうかを確認します.もしそれがサポートできれば、IDirect 3 DDevice 9インタフェースを作成できることを知る必要があります.
3.D 3 DPRESENTを初期化するPARAMETERS構造の例です.この構造には、作成するIDirect 3 DDevice 9インタフェースの特性を指定できる多くのデータメンバーが含まれています.
4.初期化されたD 3 DPRESENT_に基づくPARAMETERS構造のIDirect 3 DDevice 9オブジェクト.3 Dグラフィックスを表示する物理デバイスを表すC++オブジェクトです.
 

  
  
  
  
  1. #include <d3dx9.h> 
  2. #include <string.h> 
  3. #include <Windows.h> 
  4.  
  5.  
  6. #define WINDOWNAME TEXT("D3DGameFrame") 
  7. #define WINDOWCLASS TEXT("The GameFrame of Dull") 
  8.   
  9.  
  10.  
  11. #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) 
  12. #define KEYUP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1) 
  13.  
  14. const int Width  = 640; 
  15. const int Height = 480; 
  16.  
  17. HWND      mainWindowHandle = NULL;  
  18. HINSTANCE hinstanceApp     = NULL;  
  19. bool      ESC              = true
  20.  
  21. IDirect3DDevice9* Device = NULL;  
  22. IDirect3D9* d3d9 = NULL; 
  23. HRESULT hr = NULL; 
  24.  
  25.  
  26.  
  27. LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) 
  28.     PAINTSTRUCT     ps;  
  29.     HDC             hdc;     
  30.  
  31.     switch( msg ) 
  32.     { 
  33.         case WM_PAINT:  
  34.             { 
  35.                 hdc = BeginPaint(hWnd,&ps);   
  36.  
  37.                 EndPaint(hWnd,&ps); 
  38.             }  
  39.             break
  40.         case WM_DESTROY: 
  41.             { 
  42.                 ::PostQuitMessage(0); 
  43.             }            
  44.             break;       
  45.     } 
  46.     return ::DefWindowProc(hWnd, msg, wParam, lParam); 
  47.  
  48.  
  49.  
  50. int GameInit(void *parms = NULL, int num_parms = 0) 
  51.     ESC = false
  52.  
  53.  
  54.     return 1; 
  55. }  
  56.  
  57.  
  58. int GameMain(void *parms = NULL, int num_parms = 0) 
  59.     if(ESC) return 0; 
  60.      
  61.      
  62.     if (KEYDOWN(VK_ESCAPE)) 
  63.     { 
  64.         ESC = true
  65.         SendMessage(mainWindowHandle,WM_CLOSE,0,0); 
  66.     } 
  67.          
  68.     return 1; 
  69.  
  70. }  
  71.  
  72.  
  73. int GameShutdown(void *parms = NULL, int num_parms = 0) 
  74.  
  75.     if( NULL != d3d9) 
  76.     { 
  77.         d3d9->Release(); 
  78.         d3d9 = NULL; 
  79.     } 
  80.  
  81.  
  82.     if( NULL != Device) 
  83.     { 
  84.         Device->Release(); 
  85.         Device = NULL; 
  86.     } 
  87.     return 1; 
  88. }    
  89.  
  90.  
  91.  
  92.  
  93. int WINAPI WinMain(HINSTANCE hInstance, 
  94.                    HINSTANCE prevInstance,  
  95.                    PSTR cmdLine, 
  96.                    int showCmd) 
  97.     HWND hWnd; 
  98.     MSG msg; 
  99.     WNDCLASS wndClass; 
  100.  
  101.     wndClass.style         = CS_HREDRAW | CS_VREDRAW; 
  102.     wndClass.lpfnWndProc   = (WNDPROC)WndProc;  
  103.     wndClass.cbClsExtra    = NULL; 
  104.     wndClass.cbWndExtra    = NULL; 
  105.     wndClass.hInstance     = hInstance; 
  106.     wndClass.hIcon         = LoadIcon(0, IDI_APPLICATION); 
  107.     wndClass.hCursor       = LoadCursor(0, IDC_ARROW); 
  108.     wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 
  109.     wndClass.lpszMenuName  = NULL; 
  110.     wndClass.lpszClassName = WINDOWCLASS; 
  111.  
  112.     if( !RegisterClass(&wndClass) )  
  113.     { 
  114.         ::MessageBox(NULL, TEXT("RegisterClass() - FAILED"), NULL, NULL); 
  115.         return false
  116.     } 
  117.  
  118.     hWnd = CreateWindow(WINDOWCLASS, 
  119.                         WINDOWNAME,  
  120.                         WS_OVERLAPPEDWINDOW | WS_VISIBLE, 
  121.                         0, 0,  
  122.                         Width,  
  123.                         Height, 
  124.                         NULL, 
  125.                         NULL, 
  126.                         hInstance, 
  127.                         NULL);  
  128.  
  129.     if( !hWnd ) 
  130.     { 
  131.         ::MessageBox(NULL,TEXT( "CreateWindow() - FAILED"), NULL, NULL); 
  132.         return false
  133.     } 
  134.  
  135.  
  136.     hinstanceApp = hInstance; 
  137.     mainWindowHandle = hWnd; 
  138.  
  139.     ::ShowWindow(hWnd, SW_SHOW); 
  140.     ::UpdateWindow(hWnd); 
  141.  
  142.     //1:  IDirect3D9 。 
  143.  
  144.      
  145.     d3d9 = Direct3DCreate9(D3D_SDK_VERSION); 
  146.     /*Direct3DCreate9  D3D_SDK_VERSION, 
  147.      。 , 
  148.      。*/ 
  149.  
  150.     if( !d3d9 ) 
  151.     { 
  152.         ::MessageBox(NULL, TEXT("Direct3DCreate9() - FAILED"), NULL, NULL); 
  153.         return false
  154.     } 
  155.  
  156.     //2: (D3DCAPS9), 。. 
  157.     // IDirect3DDevice9 , 。 
  158.      
  159.     D3DCAPS9 caps; 
  160.  
  161.     d3d9->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps);//  (D3DCAPS9 ) 
  162.  
  163.     int vp = 0; 
  164.     if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) 
  165.         vp = D3DCREATE_HARDWARE_VERTEXPROCESSING; 
  166.     else 
  167.         vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; 
  168.  
  169.     //3:  D3DPRESENT _PARAMETERS 。 
  170.   
  171.     D3DPRESENT_PARAMETERS d3dpp; 
  172.     d3dpp.BackBufferWidth            = Width; 
  173.     d3dpp.BackBufferHeight           = Height; 
  174.     d3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8; 
  175.     d3dpp.BackBufferCount            = 1; 
  176.     d3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE; 
  177.     d3dpp.MultiSampleQuality         = 0; 
  178.     d3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD;  
  179.     d3dpp.hDeviceWindow              = hWnd; 
  180.     d3dpp.Windowed                   = true;  
  181.     d3dpp.EnableAutoDepthStencil     = true;  
  182.     d3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8; 
  183.     d3dpp.Flags                      = 0; 
  184.     d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; 
  185.     d3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE; 
  186.  
  187.     //4: D3DPRESENT _PARAMETERS IDirect3DDevice9 。 
  188.      
  189.     hr = d3d9->CreateDevice(//Creates a device to represent the display adapter. 
  190.         D3DADAPTER_DEFAULT, // primary adapter 
  191.         D3DDEVTYPE_HAL,     // device type 
  192.         hWnd,               // window associated with device 
  193.         vp,                 // vertex processing 
  194.         &d3dpp,             // present parameters 
  195.         &Device);           // return created device 
  196.  
  197.     if( FAILED(hr) ) 
  198.     { 
  199.         d3dpp.AutoDepthStencilFormat = D3DFMT_D16; 
  200.          
  201.         hr = d3d9->CreateDevice( 
  202.             D3DADAPTER_DEFAULT, 
  203.             D3DDEVTYPE_HAL, 
  204.             hWnd, 
  205.             vp, 
  206.             &d3dpp, 
  207.             &Device); 
  208.  
  209.         if( FAILED(hr) ) 
  210.         { 
  211.             d3d9->Release(); // d3d9 
  212.             ::MessageBox(NULL, TEXT("CreateDevice() - FAILED"), NULL, NULL); 
  213.             return false
  214.         } 
  215.     } 
  216.  
  217.     GameInit(); 
  218.  
  219.     while(TRUE) 
  220.     { 
  221.      
  222.         if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) 
  223.         {  
  224.             if (msg.message == WM_QUIT) 
  225.                 break;   
  226.             TranslateMessage(&msg); 
  227.             DispatchMessage(&msg); 
  228.         } 
  229.  
  230.         GameMain(); 
  231.          
  232.     }  
  233.  
  234.     GameShutdown(); 
  235.     return 0;