繁体   English   中英

glGetUniformLocation给出glError:GL_INVALID_VALUE

[英]glGetUniformLocation gives glError: GL_INVALID_VALUE

我正在使用此最小示例的某种修改版本,以使我的OpenGL代码(在Qt 5.2.0中)与Oculus HMD一起使用。 我没有更改相关部分。

然而,呼吁glGetUniformLocation在gl_uniform_2f / 4F / 1I功能总是给人glError GL_INVALID_VALUE (这绝对是这个电话,我使用了许多glGetError调用找到它)。

我之前读过尝试在不同线程中执行此类操作可能会导致问题,但我没有使用线程(据我所知,无论如何)。

着色器程序可以毫无问题地编译/链接,因此也不是问题。

到目前为止,我没有尝试过任何帮助,并且由于我对着色器缺乏经验,所以也许有人可以轻松地看到问题。

编辑:用验证着色器程序后

glValidateProgram(gl_fragment_shader_program);
glGetProgramiv(gl_fragment_shader_program, GL_VALIDATE_STATUS, &Result);
glGetProgramiv(gl_fragment_shader_program, GL_INFO_LOG_LENGTH, &InfoLogLength);
std::vector<char> ProgramErrorMessage(InfoLogLength+1);
glGetProgramInfoLog(gl_fragment_shader_program, InfoLogLength, NULL, &ProgramErrorMessage[0]);
qDebug() << &ProgramErrorMessage[0];

结果是

Validation warning! - Sampler value texture0 has not been set.
Validation successful.

而且由于我在其他地方读到这个警告通常可以忽略,所以我什么也没想到。

edit2:好的,我现在意识到必须在调用glDraw()之前验证程序。 在这种情况下,警告会消失,但是原始问题的GL_INVALID_VALUE错误仍然存​​在。

经过大量的挖掘,我发现在QGLWidget::initializeGL()调用之后,我的一个函数将着色器程序等的GLuint句柄初始化为0。 所以毕竟这并不是一个真正的openGL问题,我只是目前没有绑定正确的着色器程序。

我希望这对可能使用Qt和openGL但到目前为止还不太熟悉的人(像我一样)有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM