C++ Qt5 OpenGL GLSL版本错误
我开始在Qt和着色器中使用OpenGL(我有OpenGL的经验,但还没有使用着色器) 我遵循以下教程:(官方Qt5 OpenGL教程) 问题是,当我尝试运行我的程序时,会出现黑屏和以下错误消息:C++ Qt5 OpenGL GLSL版本错误,c++,macos,qt,opengl,glsl,C++,Macos,Qt,Opengl,Glsl,我开始在Qt和着色器中使用OpenGL(我有OpenGL的经验,但还没有使用着色器) 我遵循以下教程:(官方Qt5 OpenGL教程) 问题是,当我尝试运行我的程序时,会出现黑屏和以下错误消息: QGLShader::compile(Vertex): ERROR: 0:1: '' : version '130' is not supported QGLShader::compile(Fragment): ERROR: 0:1: '' : version '130' is not suppo
QGLShader::compile(Vertex): ERROR: 0:1: '' : version '130' is not supported
QGLShader::compile(Fragment): ERROR: 0:1: '' : version '130' is not supported
我的程序基于QGLWidget
通过浏览互联网,我发现我需要使用OpenGL3.2上下文,但Qt喜欢使用OpenGL2.x
我的电脑:
- MacBook pro retina'15,2012年末
- 英特尔高清4000
- NVidia GeForce 650M
#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):
错误(无格式,OpenGL 2.0):
您应该创建一个
QGLFormat
对象,并将其作为构造函数参数传递给QGLWidget。应按照下面的代码创建QGLFormat
对象
QGLFormat glFormat;
glFormat.setVersion( 3, 2 );
glFormat.setProfile( QGLFormat::CoreProfile );
我的macbook(2011年初)也有同样的错误,这对我很有帮助。基本上你不赞成版本120 Newer
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
的内容。您可以将触发这些错误的着色器添加到消息中吗?(当然,假设只是从着色器的源中删除#version 130
并不能使它们工作)着色器已经包含#version 130
,这就是它不工作的原因,直到,您可以将您使用的着色器的源添加到您的帖子中吗?另外,请说明您使用的是哪个Qt版本,并转储您获得的OpenGL上下文的确切版本,好吗?(通过glwidget->context()->format().majorVersion()
和minorVersion
)。我已将我的版本、着色器和错误放在帖子中,解决了这些错误,但它给了我一个错误:QGLShaderProgram:shader程序不受支持
QGLShaderProgram是一个小包装器,基本上可以让事情变得简单一点,但实际上并不需要它。我在Github创建了一个简单的OpenGL3.2QT示例,您可以从中获得灵感:Qt5.0更喜欢OpenGL2.0(如您所知)。如果您想使用Qt OpenGL抽象层,我建议您安装Qt 5.1 beta,它支持现代OpenGL更好()我这样做了,但现在我得到了以下信息:QGLShader::compile(Vertex):错误:0:1:'':不支持版本“130”:错误:0:2:'':#需要版本,但缺少版本。QGLShader::compile(片段):错误:0:1:“”:不支持版本“130”:错误:0:2:“”:#需要版本,但缺少版本代码>“Qt 5.0更喜欢OpenGL 2.0”是错误的(而且毫无意义。Qt不“喜欢”任何东西)。请注意,在实例化QApplication
QGLFormat glFormat;
glFormat.setVersion( 3, 2 );
glFormat.setProfile( QGLFormat::CoreProfile );
// main.cpp
QSurfaceFormat glFormat;
glFormat.setVersion(3, 3);
glFormat.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(glFormat);