Direct 3 D初期化
21303 ワード
手順:
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.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++オブジェクトです.
- #include <d3dx9.h>
- #include <string.h>
- #include <Windows.h>
-
-
- #define WINDOWNAME TEXT("D3DGameFrame")
- #define WINDOWCLASS TEXT("The GameFrame of Dull")
-
-
-
- #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
- #define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
-
- const int Width = 640;
- const int Height = 480;
-
- HWND mainWindowHandle = NULL;
- HINSTANCE hinstanceApp = NULL;
- bool ESC = true;
-
- IDirect3DDevice9* Device = NULL;
- IDirect3D9* d3d9 = NULL;
- HRESULT hr = NULL;
-
-
-
- LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- PAINTSTRUCT ps;
- HDC hdc;
-
- switch( msg )
- {
- case WM_PAINT:
- {
- hdc = BeginPaint(hWnd,&ps);
-
- EndPaint(hWnd,&ps);
- }
- break;
- case WM_DESTROY:
- {
- ::PostQuitMessage(0);
- }
- break;
- }
- return ::DefWindowProc(hWnd, msg, wParam, lParam);
- }
-
-
-
- int GameInit(void *parms = NULL, int num_parms = 0)
- {
- ESC = false;
-
-
- return 1;
- }
-
-
- int GameMain(void *parms = NULL, int num_parms = 0)
- {
- if(ESC) return 0;
-
-
- if (KEYDOWN(VK_ESCAPE))
- {
- ESC = true;
- SendMessage(mainWindowHandle,WM_CLOSE,0,0);
- }
-
- return 1;
-
- }
-
-
- int GameShutdown(void *parms = NULL, int num_parms = 0)
- {
-
- if( NULL != d3d9)
- {
- d3d9->Release();
- d3d9 = NULL;
- }
-
-
- if( NULL != Device)
- {
- Device->Release();
- Device = NULL;
- }
- return 1;
- }
-
-
-
-
- int WINAPI WinMain(HINSTANCE hInstance,
- HINSTANCE prevInstance,
- PSTR cmdLine,
- int showCmd)
- {
- HWND hWnd;
- MSG msg;
- WNDCLASS wndClass;
-
- wndClass.style = CS_HREDRAW | CS_VREDRAW;
- wndClass.lpfnWndProc = (WNDPROC)WndProc;
- wndClass.cbClsExtra = NULL;
- wndClass.cbWndExtra = NULL;
- wndClass.hInstance = hInstance;
- wndClass.hIcon = LoadIcon(0, IDI_APPLICATION);
- wndClass.hCursor = LoadCursor(0, IDC_ARROW);
- wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
- wndClass.lpszMenuName = NULL;
- wndClass.lpszClassName = WINDOWCLASS;
-
- if( !RegisterClass(&wndClass) )
- {
- ::MessageBox(NULL, TEXT("RegisterClass() - FAILED"), NULL, NULL);
- return false;
- }
-
- hWnd = CreateWindow(WINDOWCLASS,
- WINDOWNAME,
- WS_OVERLAPPEDWINDOW | WS_VISIBLE,
- 0, 0,
- Width,
- Height,
- NULL,
- NULL,
- hInstance,
- NULL);
-
- if( !hWnd )
- {
- ::MessageBox(NULL,TEXT( "CreateWindow() - FAILED"), NULL, NULL);
- return false;
- }
-
-
- hinstanceApp = hInstance;
- mainWindowHandle = hWnd;
-
- ::ShowWindow(hWnd, SW_SHOW);
- ::UpdateWindow(hWnd);
-
- //1: IDirect3D9 。
-
-
- d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
- /*Direct3DCreate9 D3D_SDK_VERSION,
- 。 ,
- 。*/
-
- if( !d3d9 )
- {
- ::MessageBox(NULL, TEXT("Direct3DCreate9() - FAILED"), NULL, NULL);
- return false;
- }
-
- //2: (D3DCAPS9), 。.
- // IDirect3DDevice9 , 。
-
- D3DCAPS9 caps;
-
- d3d9->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps);// (D3DCAPS9 )
-
- int vp = 0;
- if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
- vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
- else
- vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
-
- //3: D3DPRESENT _PARAMETERS 。
-
- D3DPRESENT_PARAMETERS d3dpp;
- d3dpp.BackBufferWidth = Width;
- d3dpp.BackBufferHeight = Height;
- d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
- d3dpp.BackBufferCount = 1;
- d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
- d3dpp.MultiSampleQuality = 0;
- d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
- d3dpp.hDeviceWindow = hWnd;
- d3dpp.Windowed = true;
- d3dpp.EnableAutoDepthStencil = true;
- d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
- d3dpp.Flags = 0;
- d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
- d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
-
- //4: D3DPRESENT _PARAMETERS IDirect3DDevice9 。
-
- hr = d3d9->CreateDevice(//Creates a device to represent the display adapter.
- D3DADAPTER_DEFAULT, // primary adapter
- D3DDEVTYPE_HAL, // device type
- hWnd, // window associated with device
- vp, // vertex processing
- &d3dpp, // present parameters
- &Device); // return created device
-
- if( FAILED(hr) )
- {
- d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
-
- hr = d3d9->CreateDevice(
- D3DADAPTER_DEFAULT,
- D3DDEVTYPE_HAL,
- hWnd,
- vp,
- &d3dpp,
- &Device);
-
- if( FAILED(hr) )
- {
- d3d9->Release(); // d3d9
- ::MessageBox(NULL, TEXT("CreateDevice() - FAILED"), NULL, NULL);
- return false;
- }
- }
-
- GameInit();
-
- while(TRUE)
- {
-
- if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
- {
- if (msg.message == WM_QUIT)
- break;
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
-
- GameMain();
-
- }
-
- GameShutdown();
- return 0;
- }