使用QGLShaderProgram时出现GLSL编译错误

时间:2013-04-10 18:57:55

标签: c++ qt opengl glsl

我目前正在尝试Qt 5中的一些opengl组件,我正在使用QtCreator 2.6.2在Mac OSX 10.8上进行编译,叮当4.2 我编写了一个非常基本的GLSL着色器,可以在OpenGl Shader Builder中很好地编译和链接,但是当我尝试使用QGLShader加载它时,它无法编译,并且日志函数没有返回错误消息。

顶点着色器:

attribute vec4 in_position;
attribute vec3 in_normal;
attribute vec3 in_color;
attribute vec2 in_tex;

uniform vec4 lightPosition;

varying vec2 texCoords;
varying vec3 normal;
varying vec3 vertToLightDir;

void main(void)
{
    gl_Position = gl_ModelViewProjectionMatrix * in_position;
    vec4 worldVert = gl_ModelViewMatrix * in_position;
    vertToLightDir = normalize(vec3(lightPosition - worldVert));
    normal = gl_NormalMatrix * in_normal;
    texCoords = in_tex;
}

Fragment Shader:

uniform sampler2D texture0;
uniform vec4 lightColor;

varying vec2 texCoords;
varying vec3 normal;
varying vec3 vertToLightDir;

void main(void)
{
    float lightIntensity = clamp(dot(normal, vertToLightDir), 0.0, 1.0);
    gl_FragColor = (texture2D(texture0, texCoords) + (lightColor * lightIntensity)) * 0.5;
}

加载着色器的代码:

QGLShader fragShader(QGLShader::Fragment);
bool success = fragShader.compileSourceFile("Fragment.glsl");
qDebug() << fragShader.log();

我使用调试器看到compileSourceFile函数返回false,我还使用了access(“Fragment.glsl”,F_OK)来查看程序是否设法找到文件并且确实如此,顶点着色器也是如此文件,我似乎无法找到他们不会编译的原因。有什么我做错了吗?

1 个答案:

答案 0 :(得分:1)

经过一些调试后,我意识到我在创建有效的上下文之前尝试编译着色器。我的坏。