最近在使用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",
"libd3d11.a",
"fxc.exe"
]
},
从这里可以看出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目录