我刚开始使用Qt及OpenGL以及着色器(我有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年末 - Intel 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
#version 130
,这就是它不能工作的原因。 - Dirkglwidget->context()->format().majorVersion()
和minorVersion
)。 - peppe