Я пытаюсь разработать базовую игру в iOS и OpenGL ES, но я застрял в этой проблеме с униформой, вот код, который передает значение моей униформе:
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);
Обратите внимание, что для установки функции glUniform, предшествующей glUseProgram, и перед вызовом glDrawArrays, была предпринята осторожность. Единые местоположения также выглядят прекрасно, также подтверждается трассировкой. Вот что я получаю, когда запускаю инструмент анализатора OpenGL ES в XCode:
Он возвращает GL_INVALID_OPERATION для glUniform4fv, обратите внимание, что представленные значения кажутся правильными.
Вот возможные причины ошибки GL_INVALID_OPERATION, найденной в документации:
- текущий программный объект отсутствует.
- размер единообразной переменной, объявленной в шейдере, не соответствует размеру, указанному командой glUniform.
- один из подписанных или беззнаковых целочисленных вариантов этой функции используется для загрузки единой переменной типа float, vec2, vec3, vec4 или массива из них или если один из вариантов с плавающей запятой этой функции используется для загрузки единой переменной типа int, ivec2, ivec3, ivec4, unsigned int, uvec2, uvec3, uvec4 или их массива.
- один из подписанных целочисленных вариантов этой функции используется для загрузки единой переменной типа unsigned int, uvec2, uvec3, uvec4 или массива из них.
- один из беззнаковых целочисленных вариантов этой функции используется для загрузки единой переменной типа int, ivec2, ivec3, ivec4 или массива из них.
- location является недопустимым равномерным местоположением для текущего объекта программы, а местоположение не равно -1.
- count больше 1, и указанная однородная переменная не является переменной массива.
- сэмплер загружается с помощью команды, отличной от glUniform1i и glUniform1iv.
Никто из них, похоже, не объясняет, почему, черт возьми, я получаю эту ошибку. Это сводит меня с ума, пожалуйста, помогите!