本文介绍了错误:QOpenGLShader:无法创建着色器-使用Qt5.2 Mingw OpenGL编译QtQuick应用程序时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经下载并安装了"Qt 5.2 mingw(opengl和x86)"版本.当我使用此版本的Qt运行Qt项目时,没有问题.但是,当我运行Qt Quick应用程序时,程序崩溃,并且以下消息记录了调试信息:

I've downloaded and installed "Qt 5.2 mingw (opengl and x86)" version. When i run Qt projects with this version of Qt, there is no problem. But when i run a Qt Quick application, the program crash and following messages log in debug:

getProcAddress: Unable to resolve 'glGenRenderbuffers'
getProcAddress: Unable to resolve 'glGenRenderbuffersOES'
getProcAddress: Unable to resolve 'glGenRenderbuffersARB'
getProcAddress: Unable to resolve 'glGenRenderbuffersEXT'
getProcAddress: Unable to resolve 'glBindRenderbuffer'
getProcAddress: Unable to resolve 'glBindRenderbufferOES'
getProcAddress: Unable to resolve 'glBindRenderbufferARB'
getProcAddress: Unable to resolve 'glBindRenderbufferEXT'
getProcAddress: Unable to resolve 'glRenderbufferStorage'
getProcAddress: Unable to resolve 'glRenderbufferStorageOES'
getProcAddress: Unable to resolve 'glRenderbufferStorageARB'
getProcAddress: Unable to resolve 'glRenderbufferStorageEXT'
getProcAddress: Unable to resolve 'glGenRenderbuffers'
getProcAddress: Unable to resolve 'glGenRenderbuffersOES'
getProcAddress: Unable to resolve 'glGenRenderbuffersARB'
getProcAddress: Unable to resolve 'glGenRenderbuffersEXT'
getProcAddress: Unable to resolve 'glBindRenderbuffer'
getProcAddress: Unable to resolve 'glBindRenderbufferOES'
getProcAddress: Unable to resolve 'glBindRenderbufferARB'
getProcAddress: Unable to resolve 'glBindRenderbufferEXT'
getProcAddress: Unable to resolve 'glRenderbufferStorage'
getProcAddress: Unable to resolve 'glRenderbufferStorageOES'
getProcAddress: Unable to resolve 'glRenderbufferStorageARB'
getProcAddress: Unable to resolve 'glRenderbufferStorageEXT'
getProcAddress: Unable to resolve 'glFramebufferRenderbuffer'
getProcAddress: Unable to resolve 'glFramebufferRenderbufferOES'
getProcAddress: Unable to resolve 'glFramebufferRenderbufferARB'
getProcAddress: Unable to resolve 'glFramebufferRenderbufferEXT'
getProcAddress: Unable to resolve 'glFramebufferRenderbuffer'
getProcAddress: Unable to resolve 'glFramebufferRenderbufferOES'
getProcAddress: Unable to resolve 'glFramebufferRenderbufferARB'
getProcAddress: Unable to resolve 'glFramebufferRenderbufferEXT'
getProcAddress: Unable to resolve 'glGenBuffers'
getProcAddress: Unable to resolve 'glGenBuffersOES'
getProcAddress: Unable to resolve 'glGenBuffersARB'
getProcAddress: Unable to resolve 'glGenBuffersEXT'
getProcAddress: Unable to resolve 'glBindBuffer'
getProcAddress: Unable to resolve 'glBindBufferOES'
getProcAddress: Unable to resolve 'glBindBufferARB'
getProcAddress: Unable to resolve 'glBindBufferEXT'
getProcAddress: Unable to resolve 'glBufferData'
getProcAddress: Unable to resolve 'glBufferDataOES'
getProcAddress: Unable to resolve 'glBufferDataARB'
getProcAddress: Unable to resolve 'glBufferDataEXT'
getProcAddress: Unable to resolve 'glBindBuffer'
getProcAddress: Unable to resolve 'glBindBufferOES'
getProcAddress: Unable to resolve 'glBindBufferARB'
getProcAddress: Unable to resolve 'glBindBufferEXT'
getProcAddress: Unable to resolve 'glBindBuffer'
getProcAddress: Unable to resolve 'glBindBufferOES'
getProcAddress: Unable to resolve 'glBindBufferARB'
getProcAddress: Unable to resolve 'glBindBufferEXT'
getProcAddress: Unable to resolve 'glCreateProgram'
getProcAddress: Unable to resolve 'glCreateProgramARB'
getProcAddress: Unable to resolve 'glCreateProgramObject'
getProcAddress: Unable to resolve 'glCreateProgramObjectARB'
QOpenGLShaderProgram: could not create shader program
getProcAddress: Unable to resolve 'glCreateShader'
getProcAddress: Unable to resolve 'glCreateShaderARB'
getProcAddress: Unable to resolve 'glCreateShaderObject'
getProcAddress: Unable to resolve 'glCreateShaderObjectARB'
QOpenGLShader: could not create shader
Renderer failed shader compilation:
""

我该如何解决这个问题?这个问题与我的图形卡有关吗?

How can i solve this issue? Is this issue related to my graphic card?

推荐答案

当图形卡驱动程序不支持Qt.Quick应用程序必需的OpenGL 2.0时,就会发生这种情况.

This happens when your graphic card drivers do not support OpenGL 2.0 which is mandatory for Qt.Quick applications.

第一个解决方案是升级图形卡驱动程序.您还可以使用 OpenGL扩展查看器来验证您支持的OpenGL版本.

The first solution would be to upgrade your graphic card driver. You can also use OpenGL extensions Viewer to verify which OpenGL versions you support.

另一方面,如果您希望能够将应用程序部署到其他Windows安装并且不想让用户更新驱动程序,那么您不应使用基于OpenGL的Qt5构建,而应使用基于OpenGL的Qt5构建.在角度.遗憾的是,从Qt 5.1开始,Qt团队停止使用ANGLE和mingw发行Qt版本.因此,您要么需要自己重新编译Qt,要么使用基于另一个编译器的版本.

On the other hand, if you want to be able to deploy your apps to other Windows installations and do not want to have to ask users to update their drivers then you should not use the Qt5 build based on OpenGL but the ones based on ANGLE. Regretfully, since Qt 5.1, the Qt team stopped releasing versions of Qt with ANGLE and mingw. So you either need to recompile Qt yourself or use a version based on another compiler.

有关Qt5和Windows和ANGLE/OpenGL的更多信息,请参见此处

More information about Qt5 and Windows and ANGLE/OpenGL can be found here

编辑Qt5.3

EDIT for Qt5.3

Qt 5.3上,已将一个新信号添加到QQuickWindow中,称为 sceneGraphError ,它使您知道初始化失败,而不仅仅是显示空白屏幕.

On Qt 5.3 a new signal has been added to QQuickWindow called sceneGraphError which allows you to know that the initialization failed instead of just getting a blank screen.

此外,Qt小组正在研究首先在客户端计算机上尝试OpenGL的能力,如果该失败无法回退到ANGLE.在Qt 5.3中仍处于试验阶段,应该属于Qt 5.4版本.

Also the Qt team is working on the ability to try OpenGL first on the client machine and if it fails fallback to ANGLE. This is still experimental in Qt 5.3 and should be part of the Qt 5.4 release.

这篇关于错误:QOpenGLShader:无法创建着色器-使用Qt5.2 Mingw OpenGL编译QtQuick应用程序时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-24 02:54