На самом деле, более новые модели iOS, поддерживающие OpenGL ES 2.0, имеют возможность использовать текстуры не-степени двух, потому что это предусмотрено в спецификации OpenGL ES 2.0. Эти устройства также позволяют использовать в OpenGL ES 1.1 текстуры не-степени двух, используя расширение GL_APPLE_texture_2D_limited_npot
, которое я более подробно опишу в своем ответе здесь .
Ограничения, которые Apple накладывает на эти текстуры не-степени-двух, заключаются в том, что они не должны быть отображены в виде mip-карт, и они должны использовать GL_CLAMP_TO_EDGE
для обтекания:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Я использую такие текстуры в моем примере приложения OpenGL ES 2.0 здесь .
Вам не нужно искать другой способ передачи своих текстур шейдерам на этих устройствах.