繁体   English   中英

Qt5 OpenGL GLSL版本错误

[英]Qt5 OpenGL GLSL version error

我开始使用OpenGL和Qt,以及使用Shaders(我有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视网膜'15,2012年末
  • 英特尔HD 4000
  • NVidia 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构造QGLFormat 相反,在main.cpp ,为所有QOpenGLWidgetQOpenGLContext指定默认的QSurfaceFormat ,如下所示:

// main.cpp
QSurfaceFormat glFormat;
glFormat.setVersion(3, 3);
glFormat.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(glFormat);

现在,您应该可以在着色器中使用#version 330 core的内容。

您应该创建一个QGLFormat对象并将其作为构造函数参数传递给QGLWidget。 应创建QGLFormat对象,如下面的代码所示。

QGLFormat glFormat;
glFormat.setVersion( 3, 2 );
glFormat.setProfile( QGLFormat::CoreProfile );

我的macbook上有同样的错误(2011年初), 这个答案对我有帮助。 基本上你弃用到版本120。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM