博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DirectX学习之第一个可运行的工程
阅读量:5291 次
发布时间:2019-06-14

本文共 3441 字,大约阅读时间需要 11 分钟。

学习一门开发语言的第一件事情当然是搭建一个可运行的环境,然后运行一个可成功执行的案例。

本人在学习DirectX的第一个工程的时候,参考了雨凇MoMo的一篇文章(https://www.xuanyusong.com/archives/802),但是看了之后,还是不知道如何才能运行起来。

然后,又参考了一篇文章(https://blog.csdn.net/chenwu_843402773/article/details/8077935)。

通过参考第二篇文章中的一些内容,最终把第一篇文章中的案例运行了起来,在此做一下记录,具体原理,相信随着学习 Direct 的逐渐升入,会理解的,现在不做过多说明,哈哈哈哈哈哈。。。

1 #include
2 3 #define WINDOW_CLASS "UGPDX" //宏定义窗口类名称 4 #define WINDOW_NAME "MyFirstDirectProject" //宏定义窗口名称 5 6 LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); 7 LPDIRECT3D9 g_pD3D = NULL; 8 LPDIRECT3DDEVICE9 g_pDevice = NULL; 9 HRESULT InitD3D(HWND hwnd); 10 void Cleanup(); 11 void Render(); 12 13 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE prevhInst, LPSTR cmdLine, int show) 14 { 15 WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, 16 GetModuleHandle(NULL), NULL, NULL, NULL, NULL, 17 WINDOW_CLASS, NULL }; 18 RegisterClassEx(&wc); 19 20 HWND hWnd = CreateWindow(WINDOW_CLASS, WINDOW_NAME, WS_OVERLAPPEDWINDOW, 21 100, 100, 640, 480, GetDesktopWindow(), NULL, 22 wc.hInstance, NULL); 23 24 25 if (InitD3D(hWnd) == S_OK) 26 { 27 ShowWindow(hWnd, SW_SHOWDEFAULT); 28 UpdateWindow(hWnd); 29 30 MSG msg; 31 ZeroMemory(&msg, sizeof(msg)); 32 33 while (msg.message != WM_QUIT) 34 { 35 if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) 36 { 37 TranslateMessage(&msg); 38 DispatchMessage(&msg); 39 } 40 else 41 { 42 Render(); 43 } 44 } 45 } 46 47 UnregisterClass(WINDOW_CLASS, wc.hInstance); 48 49 return 0; 50 } 51 LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) 52 { 53 switch (msg) 54 { 55 case WM_DESTROY: 56 PostQuitMessage(0); 57 return 0; 58 break; 59 60 case WM_KEYUP: 61 if (wParam == VK_ESCAPE) PostQuitMessage(0); 62 break; 63 } 64 65 return DefWindowProc(hWnd, msg, wParam, lParam); 66 } 67 68 HRESULT InitD3D(HWND hwnd) 69 { 70 if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))) 71 { 72 return E_FAIL; 73 } 74 75 D3DPRESENT_PARAMETERS d3dpparams; 76 ZeroMemory(&d3dpparams, sizeof(d3dpparams)); 77 d3dpparams.Windowed = true; 78 d3dpparams.SwapEffect = D3DSWAPEFFECT_DISCARD; 79 d3dpparams.BackBufferFormat = D3DFMT_UNKNOWN; 80 81 if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, 82 D3DDEVTYPE_HAL, 83 hwnd, 84 D3DCREATE_SOFTWARE_VERTEXPROCESSING, 85 &d3dpparams, 86 &g_pDevice))) 87 { 88 return E_FAIL; 89 } 90 91 return S_OK; 92 } 93 94 void Cleanup() 95 { 96 if (NULL != g_pDevice) 97 { 98 g_pDevice->Release(); 99 }100 if (NULL != g_pD3D)101 {102 g_pD3D->Release();103 }104 }105 106 107 void Render()108 {109 if (NULL == g_pDevice)110 {111 return;112 }113 114 g_pDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(30, 60, 90), 1.0f, 0);115 116 if (SUCCEEDED(g_pDevice->BeginScene()))117 {118 g_pDevice->EndScene();119 }120 121 g_pDevice->Present(NULL, NULL, NULL, NULL);122 }

运行结果:

 

转载于:https://www.cnblogs.com/luguoshuai/p/10459508.html

你可能感兴趣的文章
Java 字符终端上获取输入三种方式
查看>>
javascript 简单工厂
查看>>
java调用oracle存储过程,返回结果集
查看>>
使用命令创建数据库和表
查看>>
数据库的高级查询
查看>>
HttpClient(一)-- HelloWorld
查看>>
dump调试函数
查看>>
Android 利用Sharp样式设置文本框EditText圆角形状
查看>>
[YTU]_2443 ( C++习题 复数类--重载运算符3+)
查看>>
sdut_1189
查看>>
归并排序
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
走遍美国 —— 各州及其别名
查看>>
国内外免费电子书(数学、算法、图像、深度学习、机器学习)
查看>>
狄利克雷过程(Dirichlet Process)
查看>>
五子棋项目的实现(二)博弈树算法的描述
查看>>
Hibernate : Disabling contextual LOB creation as createClob() method threw error
查看>>
【bzoj4872】[Shoi2017]分手是祝愿 期望dp
查看>>
字符串元转分
查看>>
thinkphp 防sql注入
查看>>