关于vs2017如何配置和运行龙书DX9案例
關(guān)于vs2017如何配置和運行龍書DX9案例
首先是運行環(huán)境
- Visual Studio 2017(我用的社區(qū)版)
- DXSDK_Jun10(下載地址)
下面就是配置環(huán)境了
-1、 下載的DXSDK_Jun10.exe雙擊進(jìn)行安裝,安裝完畢后會有一個文件夾:Microsoft DirectX SDK (June 2010)(我使用的是默認(rèn)安裝文件夾位置在:C:\Program Files (x86) ) ,Microsoft DirectX SDK (June 2010)就是direct9 的運行庫了(當(dāng)然其中也包括DX10、DX11的運行庫)
- 2、運行庫有了就開始配置吧,打開vs2017, 文件新建項目選擇Visual C++ 點擊空項目,如下圖
-
- 3、項目創(chuàng)建完成后,右鍵點擊項目,選擇屬性
-
-
- 4、點擊VC++目錄,在包含目錄選擇編輯導(dǎo)入包含目錄,我的路徑是(C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include)
-
-
- 然后選擇庫目錄點擊編輯導(dǎo)入目錄我的目錄是(C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x86)
-
-
- 5、然后在選擇“連接器”“輸入”中的“附加依賴項”編輯,輸入d3d9.lib d3dx9.lib winmm.lib
-
-
- 6、點擊應(yīng)用 確定,這里環(huán)境就已經(jīng)配置完成了,下面就開始運行案例了
案例運行
這里使用的是龍書的第一個案例
d3dUtility.h文件代碼
#ifndef __d3dUtilityH__ #define __d3dUtilityH__#include <d3dx9.h> #include <string>namespace d3d {bool InitD3D(HINSTANCE hInstance, // [in] Application instance.int width, int height, // [in] Backbuffer dimensions.bool windowed, // [in] Windowed (true)or full screen (false).D3DDEVTYPE deviceType, // [in] HAL or REFIDirect3DDevice9** device);// [out]The created device.int EnterMsgLoop( bool (*ptr_display)(float timeDelta));LRESULT CALLBACK WndProc(HWND hwnd,UINT msg, WPARAM wParam,LPARAM lParam);template<class T> void Release(T t){if( t ){t->Release();t = 0;}}template<class T> void Delete(T t){if( t ){delete t;t = 0;}} }#endif // __d3dUtilityH__d3dInit.cpp文件代碼
#include "d3dUtility.h"// // Globals //IDirect3DDevice9* Device = 0; // // Framework Functions //bool Setup() {// Nothing to setup in this sample.return true; }void Cleanup() {// Nothing to cleanup in this sample. }bool Display(float timeDelta) {if( Device ) // Only use Device methods if we have a valid device.{// Instruct the device to set each pixel on the back buffer black -// D3DCLEAR_TARGET: 0x00000000 (black) - and to set each pixel on// the depth buffer to a value of 1.0 - D3DCLEAR_ZBUFFER: 1.0f.Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x00000000, 1.0f, 0);// Swap the back and front buffers.Device->Present(0, 0, 0, 0);}return true; }// // WndProc // LRESULT CALLBACK d3d::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch( msg ){case WM_DESTROY:::PostQuitMessage(0);break;case WM_KEYDOWN:if( wParam == VK_ESCAPE )::DestroyWindow(hwnd);break;}return ::DefWindowProc(hwnd, msg, wParam, lParam); }// // WinMain // int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE prevInstance, PSTR cmdLine,int showCmd) {if(!d3d::InitD3D(hinstance,640, 480, true, D3DDEVTYPE_HAL, &Device)){::MessageBox(0, "InitD3D() - FAILED", 0, 0);return 0;}if(!Setup()){::MessageBox(0, "Setup() - FAILED", 0, 0);return 0;}d3d::EnterMsgLoop( Display );Cleanup();Device->Release();return 0; }d3dUtility.cpp文件代碼
#include "d3dUtility.h"bool d3d::InitD3D(HINSTANCE hInstance,int width, int height,bool windowed,D3DDEVTYPE deviceType,IDirect3DDevice9** device) {//// Create the main application window.//WNDCLASS wc;wc.style = CS_HREDRAW | CS_VREDRAW;wc.lpfnWndProc = (WNDPROC)d3d::WndProc; wc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hInstance = hInstance;wc.hIcon = LoadIcon(0, IDI_APPLICATION);wc.hCursor = LoadCursor(0, IDC_ARROW);wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszMenuName = 0;wc.lpszClassName = "Direct3D9App";if( !RegisterClass(&wc) ) {::MessageBox(0, "RegisterClass() - FAILED", 0, 0);return false;}HWND hwnd = 0;hwnd = ::CreateWindow("Direct3D9App", "Direct3D9App", WS_EX_TOPMOST,0, 0, width, height,0 /*parent hwnd*/, 0 /* menu */, hInstance, 0 /*extra*/); if( !hwnd ){::MessageBox(0, "CreateWindow() - FAILED", 0, 0);return false;}::ShowWindow(hwnd, SW_SHOW);::UpdateWindow(hwnd);//// Init D3D: //HRESULT hr = 0;// Step 1: Create the IDirect3D9 object.IDirect3D9* d3d9 = 0;d3d9 = Direct3DCreate9(D3D_SDK_VERSION);if( !d3d9 ){::MessageBox(0, "Direct3DCreate9() - FAILED", 0, 0);return false;}// Step 2: Check for hardware vp.D3DCAPS9 caps;d3d9->GetDeviceCaps(D3DADAPTER_DEFAULT, deviceType, &caps);int vp = 0;if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;elsevp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;// Step 3: Fill out the D3DPRESENT_PARAMETERS structure.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 = windowed;d3dpp.EnableAutoDepthStencil = true; d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;d3dpp.Flags = 0;d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;// Step 4: Create the device.hr = d3d9->CreateDevice(D3DADAPTER_DEFAULT, // primary adapterdeviceType, // device typehwnd, // window associated with devicevp, // vertex processing&d3dpp, // present parametersdevice); // return created deviceif( FAILED(hr) ){// try again using a 16-bit depth bufferd3dpp.AutoDepthStencilFormat = D3DFMT_D16;hr = d3d9->CreateDevice(D3DADAPTER_DEFAULT,deviceType,hwnd,vp,&d3dpp,device);if( FAILED(hr) ){d3d9->Release(); // done with d3d9 object::MessageBox(0, "CreateDevice() - FAILED", 0, 0);return false;}}d3d9->Release(); // done with d3d9 objectreturn true; }int d3d::EnterMsgLoop( bool (*ptr_display)(float timeDelta) ) {MSG msg;::ZeroMemory(&msg, sizeof(MSG));static float lastTime = (float)timeGetTime(); while(msg.message != WM_QUIT){if(::PeekMessage(&msg, 0, 0, 0, PM_REMOVE)){::TranslateMessage(&msg);::DispatchMessage(&msg);}else{ float currTime = (float)timeGetTime();float timeDelta = (currTime - lastTime)*0.001f;ptr_display(timeDelta);lastTime = currTime;}}return msg.wParam; }運行截圖
初學(xué)萌新,難免有什么不足之處,望大家多多批評
總結(jié)
以上是生活随笔為你收集整理的关于vs2017如何配置和运行龙书DX9案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux awstats搭建
- 下一篇: 电能计量常用架构