綜述
對於Win10系統的大多數用戶來說,可以直接編譯本教程對應的項目並運行。但也有部分用戶由於某些原因可能會出現無法編譯的情況。
DirectX11 With Windows SDK完整目錄
歡迎加入QQ群: 727623616 可以一起探討DX11,以及有什么問題也可以在這里匯報。
與當前項目的Windows SDK版本不一致
對於Visual Studio 2017,你可以點擊項目-重定解決方案目標,選擇你當前擁有的SDK版本即可。
如果沒有上述選項,你需要全選所有項目,並在項目屬性-常規中,將Windows SDK版本改為當前你擁有的SDK版本。
存在大量的編譯錯誤
此問題僅針對SDK版本在10.0.162099.0以下,並且是使用VS2017的情況。
由於在Visual Studio 2017版本15.5及更高版本所創建的新項目中,新增了編譯器的標准符合性模式(/permissive-
),並且該選項默認是開啟的。該選項用於檢測一些非標准C++語言的寫法,並且僅支持從10.0.162099.0
開始到目前最新版本的Windows SDK。舊版本的Windows SDK在編譯時會引發大量的編譯錯誤,需要在項目屬性- C/C++ -語言中,將符合模式設為否。
注意: 在低版本的Visual Studio 2017,以及Visual Studio 2015是沒有標准符合性模式的設置的,並且默認為否。
具體可以參考 觸發-(標准符合性)
Debug模式下打開程序出現D3D11CreateDevice Failed
這種情況下Release模式應該還是可以運行的,現在查看調試輸出窗口應該會有如下信息
目前已經確認是你電腦的Win10系統沒有安裝圖形工具。首先點擊Win-Windows 管理工具-服務
找到服務(本地)中的Windows Update項,如果沒有啟用,則將它啟動。
然后右鍵Win-設置,搜索:管理可選功能,進去后查看現在可選功能是否包含了圖形工具,若沒有則添加該功能,安裝完成后可以看到:
現在應該可以進行調試了
提示Direct3D Feature Level 11 unsupported
出現這個說明你的顯卡不支持特性等級11.0,你可以嘗試給特性等級數組添加D3D_FEATURE_LEVEL_10_1
和D3D_FEATURE_LEVEL_10_0
,然后將所有的HLSL編譯器使用的着色器模型下調至Shader Model 4.0
,還要在所有CreateShaderFromFile
函數中下調。
Windows 7系統無法直接運行的解決方法
在編寫該項目的時候一開始是只考慮了Win 10 系統,沒有考慮向下兼容的,但現在既然要做到兼容(可能是部分兼容),還需要在原有的項目基礎進行一些額外的配置。
無法定位程序輸入點CreateFile2於動態鏈接庫kernel32.dll上
CreateFile2
函數僅Windows 8以上的系統支持,該函數在DDSTextureLoader
中用到,但我們可以通過修改_WIN32_WINNT
的值來讓它使用CreateFileW
。
在項目屬性-C/C++ -預處理器中按下面的方式添加宏:
然后重新編譯解決方案/項目即可。
從本教程項目08起都無法看到文字
考慮到不應該只是因為無法看到文字就讓程序運行不了,經過修改后,如果你的系統不支持DirectX 11.1,則將不會顯示文字。如果你想要在Windows 7系統上看到項目的文字,則需要:
- 更新Windows 7系統直到安裝了Service Pack 1
- 安裝KB2670838補丁
缺少d3dCompiler_47.dll
Windows 7系統通常情況下是缺少該動態庫的,但如果你裝了Visual Studio 2015/2017,通常會包含該動態庫供使用。為此,你需要從Visual Studio的安裝路徑中找到運行庫對應的版本,如:
Windows SDK 8.1對應C:\Program Files (x86)\Windows Kits\8.1\Redist\D3D
,然后再根據x64還是x86將里面的d3dCompiler_47.dll
復制到你的項目,或者C:\Windows\System32
中。
缺少api-ms-win-core-libraryloader-l1-1-0.dll
出現該問題是因為將不合適的d3dCompiler_47.dll
拉入到項目或系統環境中,參照上一條進行操作。
DirectX11 With Windows SDK完整目錄
歡迎加入QQ群: 727623616 可以一起探討DX11,以及有什么問題也可以在這里匯報。