我开始将 OpenGL 与 Qt 和着色器一起使用(我有 OpenGL 经验,但还没有着色器)
我正在学习本教程:http://releases.qt-project.org/learning/developerguides/qtopengltutorial/OpenGLTutorial.pdf (官方 Qt5 OpenGL 教程)。
问题是,当我尝试运行我的程序时,出现黑屏和以下错误消息:
QGLShader::compile(Vertex): ERROR: 0:1: '' : version '130' is not supported
QGLShader::compile(Fragment): ERROR: 0:1: '' : version '130' is not supported
我的程序是基于QGLWidget
通过浏览互联网,我发现我需要使用 OpenGL 3.2 上下文,但 Qt 喜欢使用 OpenGL 2.x
我的电脑:
- MacBook pro retina '15,2012 年底
- 英特尔高清 4000
- 英伟达 GeForce 650M
那么,我怎样才能让它发挥作用呢?
编辑:
我的版本是3.2(通过QGLFormat设置),没有指定格式就用2.0
fragmentShader.frag:
#version 130
uniform vec4 color;
out vec4 fragColor;
void main(void)
{
fragColor = color;
}
vertexShader.vert:
#version 130
uniform mat4 mvpMatrix;
in vec4 vertex;
void main(void)
{
gl_Position = mvpMatrix * vertex;
}
错误(格式,OpenGL 3.2):
QGLShaderProgram: shader programs are not supported
QGLShaderProgram::uniformLocation( mvpMatrix ): shader program is not linked
The program has unexpectedly finished.
错误(无格式,OpenGL 2.0):
QGLShader::compile(Vertex): ERROR: 0:1: '' : version '130' is not supported
QGLShader::compile(Fragment): ERROR: 0:1: '' : version '130' is not supported
最佳答案
较新的 QOpenGLWidget
不支持任何带有 QGLFormat
的构造函数。相反,在您的 main.cpp
中,为所有 QOpenGLWidget
和 QOpenGLContext
指定默认的 QSurfaceFormat
,如下所示:
// main.cpp
QSurfaceFormat glFormat;
glFormat.setVersion(3, 3);
glFormat.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(glFormat);
现在您应该可以在着色器中使用类似#version 330 core
的内容了。
关于c++ - Qt5 OpenGL GLSL 版本错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17390970/