1. 程式人生 > >關於mingw編譯Qt時無法編譯opengl es2(ANGLE)版本的問題

關於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目錄