Я пытаюсь визуализировать простой текстурированный квад в OpenGL ES 2.0 на iPhone. Геометрия в порядке, и я получаю ожидаемый квад, если я использую однотонный цвет в своем шейдере:
gl_FragColor = vec4 (1.0, 0.0, 0.0, 1.0);
И я получаю ожидаемые градиенты, если визуализирую координаты текстуры напрямую:
gl_FragColor = vec4 (texCoord.x, texCoord.y, 0.0, 1.0);
Данные изображения загружаются из UIImage, масштабируются до размера 1024x1024 и загружаются в текстуру, например, так:
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, как я и ожидал.