Полноэкранная структура iPhone OpenGL ES

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

Спасибо

5
задан genpfault 10 June 2010 в 13:23
поделиться

3 ответа

Текстуры NPOT поддерживаются оборудованием PowerVR SGX, но имеют ограничения. Текстуры NPOT не могут использовать MIP-карты, должны быть 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 вообще не существует, так что это дополнение.

9
ответ дан 13 December 2019 в 19:22
поделиться

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

1
ответ дан 13 December 2019 в 19:22
поделиться

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

1
ответ дан 13 December 2019 в 19:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: