18
我」嘗試開發iOS和OpenGL ES的一個基本的遊戲,但我被困在這個問題上與制服,這裏是該值傳遞給我的制服代碼:glUniform4fv是給GL_INVALID_OPERATION
glBindVertexArrayOES(_vertexArray);
// Render the object with ES2
glUseProgram(self.shaderProgram);
glUniformMatrix4fv(uniformModelViewProjection, 1, 0, modelViewProjectionMatrix.m);
// Get uniform center position
glUniform4fv(uniformCenterPosition, 1, centerPosition.v);
// Get uniform time position
glUniform1f(uniformTime, time);
// Set the sampler texture unit to 0
glUniform1i(uniformTexture, 0);
glDrawArrays(GL_POINTS, 0, numVertices);
請注意,在調用glDrawArrays之前,已經注意將glUniform函數放在glUseProgram之前。統一的位置看起來也很好,通過跟蹤確認。這裏是我所得到的,當我在XCode中運行的OpenGL ES分析工具:
它返回一個glUniform4fv GL_INVALID_OPERATION,注意代表的價值觀似乎是正確的。
下面是對GL_INVALID_OPERATION錯誤我從documentation發現可能的原因:
- 沒有當前程序對象。
- 着色器中聲明的統一變量的大小與glUniform命令指示的大小不匹配。
- 此函數的有符號或無符號整數變體之一用於加載類型爲float,vec2,vec3,vec4或其數組的統一變量,或者如果此函數的浮點變體之一是用於加載類型爲int,ivec2,ivec3,ivec4,unsigned int,uvec2,uvec3,uvec4或這些數組的一個統一變量。
- 此函數的有符號整數變體之一用於加載類型爲unsigned int,uvec2,uvec3,uvec4或其數組的統一變量。
- 此函數的一個無符號整數變體用於加載類型爲int,ivec2,ivec3,ivec4的統一變量或這些類型的數組。
- 位置是當前程序對象的無效統一位置,位置不等於-1。
- count大於1,並且指示的統一變量不是數組變量。
- 使用glUniform1i和glUniform1iv以外的命令加載採樣器。
他們似乎都沒有解釋爲什麼我聽到這個錯誤。這讓我瘋狂,請幫忙!
從列表中我可以想到的唯一原因是第2和第3點。所以在着色器中真正聲明爲'vec4'的對應統一變量(可能是'vec3')?否則,+1用於廣泛分析(儘管如此,着色器代碼也會很好)。 –
你明白了!我在前一段時間修改之後忽略了統一維度,在我將centerPosition值更改爲vec4後,我的統一vec3 ucenterp被修改爲vec4後,錯誤消失了:)非常感謝您的幫助。乾杯 – Pupillam
@ChristianRau我認爲他希望你添加你的評論作爲答案;) – 2013-02-07 14:30:07