Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt5 OpenGL GLSL版本错误_C++_Macos_Qt_Opengl_Glsl - Fatal编程技术网

C++ Qt5 OpenGL GLSL版本错误

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

我开始在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 supported
我的程序基于QGLWidget

通过浏览互联网,我发现我需要使用OpenGL3.2上下文,但Qt喜欢使用OpenGL2.x

我的电脑:

  • MacBook pro retina'15,2012年末
  • 英特尔高清4000
  • NVidia GeForce 650M
那么,我怎样才能让这一切顺利进行呢

编辑:

我的版本是3.2(通过QGLFormat设置),没有指定的格式,它使用2.0

fragmentShader.fragment:

#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);