我想调试我的应用程序但是当我运行它时,我在 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);
}
}