Я пытаюсь сделать простой текстурированный квадрат в OpenGL ES 2.0 на iPhone. Геометрия прекрасно, и я получаю ожидаемые четверной, если я использую твердый цвет в моем шейдере:OpenGL ES 2.0 текстурирование
gl_FragColor = vec4 (1.0, 0.0, 0.0, 1.0);
И я получаю ожидаемые градиенты, если я вынести координаты текстуры непосредственно:
gl_FragColor = vec4 (texCoord.x, texCoord.y, 0.0, 1.0);
Изображения данные загружаются из UIImage, масштабируется, чтобы соответствовать в пределах 1024х1024, и загружается в текстуру следующим образом:
glGenTextures (1, &_texture); glBindTexture (GL_TEXTURE_2D, _texture); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
width
, height
и содержимое из data
все правильно, как описано в отладчике.
Когда я изменить свой фрагмент шейдера использовать текстуру:
gl_FragColor = texture2D (tex, texCoord);
... и связать текстуру и сделать так:
glActiveTexture (GL_TEXTURE0); glBindTexture (GL_TEXTURE_2D, _texture); // this is unnecessary, as it defaults to 0, but for completeness... GLuint texLoc = glGetUniformLocation(_program, "tex"); glUniform1i(texLoc, 0); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
... Я ничего не получаю. Черный квадрат. glGetError()
не возвращает ошибку, а glIsTexture(_texture)
возвращает true.
Что я здесь делаю неправильно? Я был в курсе всех примеров, которые я мог найти в Интернете, но каждый делает это точно так же, как и я, и отладчик показывает, что мои параметры для различных функций GL - это то, что я ожидаю от них.
Как и вы, я не могу видеть что-то явно неправильное с представленным кодом. Если вы хотите, можете ли вы опубликовать весь проект где-нибудь? Там должно быть действительно интересно. – Tommy 2010-12-03 17:56:39
Я не хочу публиковать весь проект, но код OpenGL находится в автономном подклассе UIView: – Xtapolapocetl 2010-12-03 18:04:16