[英]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.