gDEBugger在glLinkProgram上给出错误但是正常执行有效(Qt5中的QGLWidget)

时间:2014-05-11 20:01:51

标签: opengl glsl qt5 qglwidget

我想调试我的应用程序但是当我运行它时,我在 glLinkProgram 上收到错误,我无法在调试器执行中看到输出。

调试时,在"着色器"代码视图我看到一条红线表示该程序无法链接,因为我必须写入gl_Position

但我的着色器是这样的:

#version 440

in vec3 VertexPosition;
in vec3 VertexColor;
in vec2 UV;
in float MaxVal;

out vec3 outColor;
out vec2 outUV;
out float outMaxVal;

void main()
{
    outColor = VertexColor;
    outUV = UV;
    outMaxVal = MaxVal;
    gl_Position = vec4( VertexPosition, 1.0 );
}

片段:

#version 440

in vec3 outColor;
in vec2 outUV;
in float outMaxVal;

uniform sampler2D filterTex;

out vec4 FragColor;

void main() {

    float texColor = texture( filterTex, outUV ).r;
    texColor = texColor * outMaxVal;
    FragColor = vec4(outColor.rgb * texColor,1.0f);

}

当我执行我的代码时,我可以看到编译结果和着色器,显然工作正常,但我想调试,这没有任何意义。

此外,在gDEBugger中使用QGLWidget我看到创建了三个上下文,前两个被删除了。活跃的是第三个。我什么都不做,我只是使用小部件。谁建立了这些背景?它可以给我错误吗?

*更新* 在这里我添加了我检查错误的方法。我把所有的字符串都弄空了......他们不应该包含任何类型的信息吗?

GLint status;
glFuncs.glGetProgramiv(programHandle, GL_LINK_STATUS, &status);
if (status == GL_FALSE) {
    int loglen;
    char logbuffer[1000];
    glFuncs.glGetProgramInfoLog(programHandle, sizeof(logbuffer), &loglen, logbuffer);
    fprintf(stderr, "OpenGL Program Linker Error \n%.*s", loglen, logbuffer);
} else {
    int loglen;
    char logbuffer[1000];
    glFuncs.glGetProgramInfoLog(programHandle, sizeof(logbuffer), &loglen, logbuffer);
    if (loglen > 0) {
        fprintf(stderr, "OpenGL Program Link OK \n%.*s", loglen, logbuffer);
    }
    glFuncs.glValidateProgram(programHandle);
    glFuncs.glGetProgramInfoLog(programHandle, sizeof(logbuffer), &loglen, logbuffer);
    if (loglen > 0) {
        fprintf(stderr, "OpenGL Program Validation results:\n%.*s", loglen, logbuffer);
    }
}

0 个答案:

没有答案