QT - QOpenGLShader:如何使用glsl 3.3核心

时间:2016-03-05 20:39:35

标签: c++ qt opengl

我的程序有QT设置,想要使用glsl版本"核心330"着色器。 我的GLWidget是一个QOpenGLWidget对象。 创建我的小部件后,我运行以下代码:

glWidget = new GLWidget;

QSurfaceFormat format;
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);
format.setVersion(3, 3);
format.setProfile(QSurfaceFormat::CoreProfile);
glWidget->setFormat(format);
QSurfaceFormat::setDefaultFormat(format);

现在我的问题是,如何为以下着色器启用现代GLSL:

#version 330 core

layout(location = 0) in vec3 vertex;
layout(location = 1) in vec2 uvs;
out vec2 uv;
void main(){

  uv = uvs;
  gl_Position = vec4(vertex,1.0);
}

我在StackOverflow中搜索并使用了Google,但我无法找到合适的解释。

感谢您的帮助。

修改 其他信息:

  • 我使用的是QT 5.6 alpha版本

编辑#2 我使用以下代码创建着色器:

vertexShader = new QOpenGLShader(QOpenGLShader :: Vertex);     std :: string str = ReadFile(" ./ Shader / VidIt / videoShow.vert");

vertexShader->compileSourceCode(str.c_str());
fragmentShader = new QOpenGLShader(QOpenGLShader::Fragment);
str = ReadFile("./Shader/VidIt/videoShow.frag");
vertexShader->compileSourceCode(str.c_str());

program = new QOpenGLShaderProgram();
program->addShader(vertexShader);
program->addShader(fragmentShader);
program->link();

这段代码虽然没有编译我的着色器,但我得到以下编译错误:

  

QOpenGLShader :: compile(Vertex):ERROR:0:2:'核心' :无效版本   指令

任何想法如何解决这个问题?

0 个答案:

没有答案