Полноэкранная текстура iPhone OpenGL ES - PullRequest
5 голосов
/ 10 июня 2010

Я знаю, что текстуры OpenGL на iphone должны иметь степень 2, верно ли это и для OpenGL 2.0?Если у меня есть изображение размером 320 x 480 и я хочу нарисовать его на весь экран, есть ли какой-нибудь способ сделать это с OpenGL.

Спасибо

Ответы [ 3 ]

9 голосов
/ 10 июня 2010

текстуры NPOT поддерживаются на оборудовании PowerVR SGX, но имеют ограничения. Текстуры NPOT не могут использовать mipmaps, должны быть 2D (без кубических карт или 3D текстур) и должны использовать GL_CLAMP_TO_EDGE для обтекания текстур в обоих измерениях; это поддерживается по умолчанию в OpenGL ES 2.0 и в ES 1.1 расширением GL_APPLE_texture_2D_limited_npot

Для ES 1.1 вы можете проверить во время выполнения, чтобы увидеть, присутствует ли это расширение с этим кодом:

const char* extensions = (char*) glGetString(GL_EXTENSIONS);
bool npot = strstr(extensions, "GL_APPLE_texture_2D_limited_npot") != 0;

Поскольку это присутствует только на SGX, а не на MBX, имейте в виду, что использование поддержки текстуры NPOT ограничит вас новыми устройствами SGX. Конечно, использование ES 2.0 будет делать то же самое , так что, если это ваша цель, поддержка NPOT является спорным вопросом, и вы можете продолжить работу с текстурами NPOT.

Вот альтернативное решение, которое позволяет вам продолжать использовать ES 1.1 и сохранять полную поддержку устройства. Поместите текстуру 320x480 внутри 512x512, заполните пустое пространство другими фоновыми плитками, глифами или другими текстурами, которые будут рисоваться одновременно (чтобы избежать нескольких вызовов glBindTexture), а затем используйте одно из моих любимых расширений ES 1.1, GL_OES_draw_texture, для быстрого копирования раздела 320x480 в область просмотра:

int rect[4] = {0, 0, 480, 320};
glBindTexture(GL_TEXTURE_2D, texBackground);
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, rect);
glDrawTexiOES(0, 0, z, 480, 320);

Боковая панель: сама спецификация OpenGL ES 2.0 не устанавливает никаких ограничений на текстуры NPOT; если я не ошибаюсь, Apple налагает ограничения - конечно, в мире ES 1.1, поддержка NPOT вообще не существует, так что это дополнение там.

1 голос
/ 10 июня 2010

Я думаю, это зависит от оборудования. Я использовал для создания ближайшей степени 2 текстуры, т.е. если моя текстура 320x480, тогда я создам текстуру 512x512, которая будет иметь исходные данные текстуры. это обеспечивает мобильность, но потребляет немного больше памяти;)

1 голос
/ 10 июня 2010

Если у вас не слишком много полноэкранных текстур, вы можете просто использовать 512x512 текстуру и использовать только 320x480. Это точно сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...