#include "Direct3D.h" #include "Utilities.h" INT Direct3D::init(HWND hWnd, UINT width, UINT height, BOOL isFullscreen) { // 1. create connection to Direct3D API IDirect3D9* pD3D = Direct3DCreate9(D3D_SDK_VERSION); if (pD3D == nullptr) return 200; // 2. check compatibility UINT adapter = D3DADAPTER_DEFAULT; D3DDEVTYPE devType = D3DDEVTYPE_HAL; D3DCAPS9 caps = {}; HRESULT hr = pD3D->GetDeviceCaps(adapter, devType, &caps); CheckFailed(hr, 210); DWORD vertexProcessing = D3DCREATE_SOFTWARE_VERTEXPROCESSING; // fallback software fixed function pipeline if (caps.VertexProcessingCaps == D3DDEVCAPS_HWTRANSFORMANDLIGHT) { // hardware support for fixed function pipeline vertexProcessing = D3DCREATE_HARDWARE_VERTEXPROCESSING; } // 3. define presentation parameters D3DPRESENT_PARAMETERS d3dpp = {}; d3dpp.hDeviceWindow = hWnd; // target render window d3dpp.Windowed = !isFullscreen; // window or fullscreen mode d3dpp.BackBufferCount = 1; // at least 1 d3dpp.BackBufferWidth = width; d3dpp.BackBufferHeight = height; d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // 4. create Direct3D device hr = pD3D->CreateDevice( adapter, devType, hWnd, vertexProcessing, // optional parameters &d3dpp, &_pD3DDevice ); CheckFailed(hr, 220); // 5. tidy up safeRelease(pD3D); return 0; } void Direct3D::beginScene() { } void Direct3D::endScene() { } void Direct3D::deInit() { safeRelease(_pD3DDevice); }