Qt5 OpenGL GLSL版本错误 [英] Qt5 OpenGL GLSL version error
问题描述
我开始在Qt和着色器上使用OpenGL(我有OpenGL的经验,但还没有使用着色器)
I'm starting out on using OpenGL with Qt, and with Shaders (I have OpenGL experience, but not with shaders yet)
我正在关注本教程: http://releases.qt -project.org/learning/developerguides/qtopengltutorial/OpenGLTutorial.pdf (Qt5 OpenGL官方教程).
I'm following this tutorial: http://releases.qt-project.org/learning/developerguides/qtopengltutorial/OpenGLTutorial.pdf (the official Qt5 OpenGL tutorial).
问题是,当我尝试运行程序时,出现黑屏和以下错误消息:
The problem is, that when I try to run my program, I get a black screen and the following error messages:
QGLShader::compile(Vertex): ERROR: 0:1: '' : version '130' is not supported
QGLShader::compile(Fragment): ERROR: 0:1: '' : version '130' is not supported
我的程序基于QGLWidget
My program is based on a QGLWidget
在Internet上进行一些浏览后,我发现我需要使用OpenGL 3.2上下文,但是Qt喜欢使用OpenGL 2.x
With some browsing on the interwebs I found out that I need to use an OpenGL 3.2 context, but that Qt likes to use OpenGL 2.x
我的电脑:
- MacBook Pro Retina '15,2012年末
- 英特尔HD 4000
- NVidia GeForce 650M
那么,我该如何做呢?
我的版本是3.2(通过QGLFormat设置),没有指定格式,它使用2.0
My version is 3.2 (set through QGLFormat), without a specified format it uses 2.0
fragmentShader.frag:
fragmentShader.frag:
#version 130
uniform vec4 color;
out vec4 fragColor;
void main(void)
{
fragColor = color;
}
vertexShader.vert:
vertexShader.vert:
#version 130
uniform mat4 mvpMatrix;
in vec4 vertex;
void main(void)
{
gl_Position = mvpMatrix * vertex;
}
错误(格式为OpenGL 3.2):
Errors (with format, 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):
Errors (without format, 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
,如下所示:
Newer QOpenGLWidget
doesn't support any constructor with QGLFormat
. Instead, in your main.cpp
, specify the default QSurfaceFormat
for all QOpenGLWidget
and QOpenGLContext
as following:
// main.cpp
QSurfaceFormat glFormat;
glFormat.setVersion(3, 3);
glFormat.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(glFormat);
现在,您应该可以在着色器中使用类似#version 330 core
之类的东西.
Now you should be able to use something like #version 330 core
in your shader.
这篇关于Qt5 OpenGL GLSL版本错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!