簡體   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