我已经安装了Qt 5.12,当我想编译我的项目时,请显示此 错误:
错误:
QOpenGLShaderProgram::uniformLocation(qt_Matrix): shader program is not linked
ensureInitialized(141): D3D compiler module not found.
QOpenGLShader::link: D3D compiler module not found.
shader compilation failed:
"D3D compiler module not found.\n"
答案 0 :(得分:2)
欢迎您!
首先,让我们澄清一下错误的含义。
Qt在Windows上使用 ANGLE ,该层通过将OpenGL调用转换为DirectX调用,从而允许在不可用OpenGL的系统上运行OpenGL软件。 Qt根据机器的配置(显卡型号,视频驱动程序版本等)决定是使用纯OpenGL还是使用ANGLE。 有关更多详细信息,请访问https://wiki.qt.io/Qt_5_on_Windows_ANGLE_and_OpenGL。
即使您自己没有编写任何OpenGL代码,qml运行时肯定也会有很多OpenGL调用,它们可能会经过ANGLE。
这就是为什么令人困惑的错误消息(在处理OpenGL代码时正在寻找D3D着色器编译器!)的原因。
现在,尽管在撰写本文时尚未提供解决方案,但Qt项目 bugtracker 报告的问题与您https://bugreports.qt.io/browse/QTBUG-71510相同。我建议不时查看Bugtracker,然后监视此问题的进展。
您可以尝试几种解决方法:
答案 1 :(得分:1)
根据bugreports.qt,此问题已从QT 5.12.1版中修复。
答案 2 :(得分:0)
我的较旧的Del笔记本电脑上存在相同的问题。将d3dcompiler_43.dll放在exe文件夹中确实可以解决该问题。我发现使用以下命令之一也是可行的,我认为这可以避免一起使用ANGLE。
//要使用纯OpenGL: QCoreApplication :: setAttribute(Qt :: AA_UseDesktopOpenGL);
//或使用模拟OpenGL的软件: QCoreApplication :: setAttribute(Qt :: AA_UseSoftwareOpenGL);
我只在main.cpp的“ int main(int argc,char * argv [])”括号中包括第一个纯OpenGL设置