c++ - Qt5 OpenGL GLSL 版本错误

标签 c++ macos qt opengl glsl

我开始将 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 中,为所有 QOpenGLWidgetQOpenGLContext 指定默认的 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/

相关文章:

c++ - 如何在 C++ 中编写 FCC、BCC 和 HCP 晶格数组

c++ - 如何解析外部符号

c++ - 链表问题

c++ - 检测元组中的引用类型

objective-c - 列出/搜索所有现有的 UTI(统一类型标识符)

qt - 如何从 MacOS X 终端构建 QT 项目

python - 通过 Python 启动终端并运行命令

java - Eclipse Helios Mac OS X 10.6.5 有性能问题

c++ - 使 QListWidget 只显示 1 项

c++ - Qt 5 在用户输入时播放 wav 声音