#ifndef __Direct3DFrameH__ #define __Direct3DFrameH__ #include <Windows.h> #include <d3d9.h> #include <d3dx9.h> #include <MMSystem.h> #pragma warning(disable:4018) typedef void (*GAMEINITPROC)(void); typedef void (*GAMELOGICPROC)(float fElapsedTime); typedef void (*GAMERENDERPROC)(float fElapsedTime); typedef void (*GAMECLEARUPPROC)(void); void CreateDirect3DFrame(WNDPROC WindowProc, IDirect3DDevice9*& pDevice, HWND& hWnd, HINSTANCE hInstance, GAMEINITPROC GameInit, GAMELOGICPROC GameLogic, GAMERENDERPROC GameRender, GAMECLEARUPPROC GameClearUp, int nWidth, int nHeight) { // Register Class WNDCLASSW wc; ZeroMemory(&wc,sizeof(wc)); wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.hCursor = LoadCursorW(0, IDC_ARROW); wc.hIcon = LoadIconW(0, IDI_APPLICATION); wc.hInstance = 0; wc.lpfnWndProc = WindowProc; wc.lpszClassName = L"ClassName"; wc.lpszMenuName = NULL; wc.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wc); // Get Display Mode D3DDISPLAYMODE d3ddm; ZeroMemory(&d3ddm, sizeof(d3ddm)); IDirect3D9* pD3D; pD3D = Direct3DCreate9(D3D_SDK_VERSION); pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm); // Resize Window Width And Height if(nWidth > d3ddm.Width || nWidth < 0) nWidth = d3ddm.Width; if(nHeight > d3ddm.Height || nHeight < 0) nHeight = d3ddm.Height; // Create Window hWnd = CreateWindowW(wc.lpszClassName, L"PLAY", WS_POPUP, (d3ddm.Width - nWidth) / 2, (d3ddm.Height - nHeight) / 2, nWidth, nHeight, 0, 0, hInstance, 0); // D3DCAPS9 caps; pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps); int vp = 0; if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) vp = D3DCREATE_HARDWARE_VERTEXPROCESSING; else vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; // Fill Parameter D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.BackBufferWidth = nWidth; d3dpp.BackBufferHeight = nHeight; 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_ONE; // Create Device pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, vp, &d3dpp, &pDevice); // Init Game GameInit(); // Show Window ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); // Message Loop MSG msg; ZeroMemory(&msg, sizeof(msg)); while(msg.message != WM_QUIT) { if(PeekMessageW(&msg, 0, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessageW(&msg); } else { static float fLastTime = (float)timeGetTime(); float fCurrentTime = (float)timeGetTime(); float fElapsedTime = (fCurrentTime - fLastTime) * 0.001f; GameLogic(fElapsedTime); GameRender(fElapsedTime); fLastTime = fCurrentTime; } } GameClearUp(); if(pD3D) pD3D->Release(); if(pDevice) pDevice->Release(); } #endif //#include "Direct3DFrame.h" // //// Global Values //LPDIRECT3D9 g_pD3D; //LPDIRECT3DDEVICE9 g_pDevice; //HWND g_hWnd; //ID3DXMesh* g_pMesh; // // //void GameInit() //{ // // Set World Matrix // D3DXMATRIX matWorld; // D3DXMatrixIdentity(&matWorld); // g_pDevice->SetTransform(D3DTS_WORLD, &matWorld); // // Set View Matrix // D3DXMATRIX matView; // D3DXVECTOR3 vEyePos(0.0f, 0.0f, -3.0f); // D3DXVECTOR3 vLookAt(0.0f, 0.0f, 0.0f); // D3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f); // D3DXMatrixLookAtLH(&matView, &vEyePos, &vLookAt, &vUp); // g_pDevice->SetTransform(D3DTS_VIEW, &matView); // // Set Projection Matrix // D3DXMATRIX matProj; // D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI * 0.25f, 1366.0f/768.0f, 1.0f, 1000.0f); // g_pDevice->SetTransform(D3DTS_PROJECTION, &matProj); // // Init Render State // g_pDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); // g_pDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); // g_pDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT); // // Init // D3DXCreateSphere(g_pDevice, 0.3f, 20, 20, &g_pMesh, NULL); //} // //void GameLogic(float fElapsedTime) //{ // //} // //void GameRender(float fElapsedTime) //{ // g_pDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(123,123,234), 1.0f, 0); // g_pDevice->BeginScene(); // g_pMesh->DrawSubset(0); // g_pDevice->EndScene(); // g_pDevice->Present(NULL, NULL, NULL, NULL); //} // //void GameClearUp() //{ // if(g_pMesh) g_pMesh->Release(); //} // //LRESULT CALLBACK WindowProc(HWND, int, WPARAM, LPARAM); // //int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) //{ // CreateDirect3DFrame((WNDPROC)WindowProc, g_pDevice, g_hWnd, hInstance, GameInit, GameLogic, GameRender, GameClearUp, 640, 480); // return 0; //} // //LRESULT CALLBACK WindowProc(HWND hWnd, int uMsg, WPARAM wParam, LPARAM lParam) //{ // if(uMsg == WM_KEYDOWN && wParam == VK_ESCAPE) PostQuitMessage(0); // return DefWindowProcW(hWnd, uMsg, wParam, lParam); //}