關於mingw編譯Qt時無法編譯opengl es2(ANGLE)版本的問題
最近在使用mingw64(gcc 8.1.0)編譯Qt5.12.0時,發現config總是檢測opengl es2不通過,雖然可以使用opengl desktop,但根據qt官方的建議,如果不直接使用opengl函式,還是使用opengl es2版本相容性更好,而且opengl es2和qt自帶的mutimedia視訊播放或QtAV庫視訊播放配合更好,內網外網也沒有找到解決方案,最終花了一個晚上的時間找到了問題。
Qt的configure時opengl es2檢測不通過的原因是找不到directx sdk,可以在qt-everywhere-src-5.12.0\qtbase\src\gui\configure.json中修改
將
"directx": { "label": "DirectX SDK", "type": "directX", "files": [ "d3dcompiler.h", "d3d11.lib", "fxc.exe" ], },
修改為
"directx": { "label": "DirectX SDK", "type": "directX", "files": [ "d3dcompiler.h", "d3d11.lib", "fxc.exe" ], "condition": "config.msvc" }, "directx": { "label": "DirectX SDK", "type": "directX", "files": [ "d3dcompiler.h", "libd3d11.a", "fxc.exe" ], "condition": "config.g++" },
從這裡可以看出configure 檢測DirectX SDK是否安裝是通過查詢d3d11.lib和fxc.exe實現的,而mingw的d3d11庫為libd3d11.a,同時需將fxc.exe的路徑加入環境變數path。
windows sdk 8.1及10都自帶有directx sdk,fxc.exe檔案在C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64 或C:\Program Files (x86)\Windows Kits\8.1\bin\x64,
如果沒有安裝visual studio的話只能老實地去下載directx sdk。
但還沒有完,configuire通過後如果編譯到angle,會報錯 Cannot determine DirectX SDK location. Please set DXSDK_DIR environment variable.
如果安裝了directx sdk不會報錯,但安裝directx sdk需要從下載500多m的安裝檔案,特別是微軟伺服器在國內的下載速度..
解決辦法是按照directx sdk的目錄結構模擬建立directx sdk目錄
在C盤建立directx_sdk目錄,建立 Utilities\\bin目錄
cd進Utilities\\bin目錄,通過mklink 建立到C:\Program Files (x86)\Windows Kits\8.1\bin\x64和C:\Program Files (x86)\Windows Kits\8.1\bin\x86的符號連結
mklink /D x64 C:\Program Files (x86)\Windows Kits\8.1\bin\x64 mklink /D x86 C:\Program Files (x86)\Windows Kits\8.1\bin\x86
不一定必須是win8.1 sdk,也可以是win10 sdk,比如 C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64
最後建立DXSDK_DIR環境變數,指向C:\directx_sdk目錄