Контрольный список для Создания OpenGL Приложения ES для iOS
OpenGL спецификация ES определяет независимый от платформы API для использования аппаратных средств GPU для рендеринга графики. Платформы реализовывая OpenGL , ES обеспечивает контекст рендеринга для выполнения команд OpenGL ES, кадровые буферы для содержания результатов рендеринга и одного или более мест назначения рендеринга, представляющих содержание кадрового буфера для дисплея. В iOS, EAGLContext
класс реализует контекст рендеринга. iOS обеспечивает только один тип кадрового буфера, OpenGL объект кадрового буфера ES, и GLKView
и CAEAGLLayer
классы реализуют места назначения рендеринга.
Создание OpenGL , приложение ES в iOS требует нескольких соображений, некоторые из которых универсальны к OpenGL программирование ES и некоторые из которых являются определенными для iOS. Следуйте этому контрольному списку и подробным разделам ниже для начала работы:
Определите, какая версия (и) OpenGL ES имеет правильный набор функций для Вашего приложения и создает OpenGL контекст ES.
Проверьте во время выполнения, что устройство поддерживает OpenGL возможности ES, которые Вы хотите использовать.
Выберите, где представить Ваш OpenGL содержание ES.
Удостоверьтесь свое выполнение приложения правильно в iOS.
Реализуйте свой механизм рендеринга.
Используйте XCode и Инструменты, чтобы отладить Ваш OpenGL приложение ES и настроить его для оптимальной производительности.
Выбор, который OpenGL версии ES для поддержки
Решите, должно ли Ваше приложение поддерживать OpenGL ES 3.0, OpenGL ES 2.0, OpenGL ES 1.1 или многократные версии.
OpenGL ES 3.0 является новым в iOS 7. Это добавляет много новых опций, включающих более высокую производительность, GPU общего назначения вычислительные методы и более сложные визуальные эффекты, ранее только возможные на аппаратных средствах настольного класса и игровых приставках.
OpenGL ES 2.0 является базовым профилем для устройств на iOS, обладая конфигурируемым графическим конвейером на основе программируемых программ построения теней.
OpenGL ES 1.1 обеспечивает, только базовая графика стандартной функции конвейерно обрабатывают, и доступно в iOS прежде всего для обратной совместимости.
Необходимо предназначаться для версии или версий OpenGL ES, поддерживающий функции и устройства, наиболее относящиеся к приложению. Для узнавания больше о OpenGL возможности ES устройств на iOS считайте Ссылку Совместимости устройства на iOS.
Для создания контекстов для версий OpenGL ES, который Вы планируете поддерживать, читал Конфигурирование OpenGL Контексты ES. Чтобы изучить, как Ваш выбор OpenGL версия ES касается алгоритмов рендеринга, которые Вы могли бы использовать в своем приложении, считайте OpenGL Версии ES и Архитектура Средства рендеринга.
Проверка OpenGL возможности ES
Ссылка Совместимости устройства на iOS суммирует возможности и расширения, доступные на поставляющих устройствах на iOS. Однако, чтобы позволить Вашему приложению работать на как можно большем количестве устройств и версий iOS, Ваше приложение должно всегда запрашивать OpenGL реализация ES для ее возможностей во время выполнения.
Для определения реализации определенные пределы, такие как максимальный размер текстуры или максимальное количество атрибутов вершины ищите значение для соответствующего маркера (такой как MAX_TEXTURE_SIZE
или MAX_VERTEX_ATTRIBS
, как найдено в gl.h
заголовок) использование надлежащего glGet
функция для ее типа данных.
Для проверки на расширения OpenGL ES 3.0 используйте glGetIntegerv
и glGetStringi
функции как в следующем примере кода:
BOOL CheckForExtension(NSString *searchName) |
{ |
// Create a set containing all extension names. |
// (For better performance, create the set only once and cache it for future use.) |
int max = 0; |
glGetIntegerv(GL_NUM_EXTENSIONS, &max); |
NSMutableSet *extensions = [NSMutableSet set]; |
for (int i = 0; i < max; i++) { |
[extensions addObject: @( (char *)glGetStringi(GL_EXTENSIONS, i) )]; |
} |
return [extensions containsObject: searchName]; |
} |
Для проверки на OpenGL ES 1.1 и 2,0 расширения вызвать glGetString(GL_EXTENSIONS)
получить разделенный пробелами список всех дополнительных имен.
Выбор места назначения рендеринга
В iOS, кадровый буфер объектно-ориентированные памяти результаты команд рисования. (iOS не реализует предоставленные оконной системой кадровые буферы.) Можно использовать содержание объекта кадрового буфера многократными способами:
Платформа GLKit обеспечивает представление, рисующее OpenGL содержание ES и управляющее его собственным объектом кадрового буфера и контроллером представления, поддерживающим анимацию OpenGL содержание ES. Используйте эти классы, чтобы создать полноэкранные представления или соответствовать Вашему OpenGL содержание ES в иерархию представления UIKit. Для приобретения знаний об этих классах считайте Получение с OpenGL ES и GLKit.
CAEAGLLayer
класс обеспечивает способ нарисовать OpenGL содержание ES как часть Базового состава Слоя анимации. Необходимо создать собственный объект кадрового буфера при использовании этого класса.Как с любым OpenGL реализация ES, можно также использовать кадровые буферы для внеэкранной обработки графики или представляющий к текстуре для использования в другом месте в графическом конвейере. С OpenGL ES 3.0 внеэкранные буферы могут использоваться в рендеринге алгоритмов, использующих многократные цели рендеринга.
Для приобретения знаний о рендеринге к внеэкранному буферу текстура или Базовый Слой анимации, считала Получение в Другие Места назначения Рендеринга.
Интеграция с iOS
приложения для iOS поддерживают многозадачность по умолчанию, но обрабатывающий эту функцию правильно в OpenGL приложение ES требует дополнительного рассмотрения. Неправильное использование OpenGL ES может привести к Вашему приложению, уничтожаемому системой когда в фоновом режиме.
Много устройств на iOS включают дисплеи с высокой разрешающей способностью, таким образом, Ваше приложение должно поддерживать многократные размеры дисплея и разрешения.
Для приобретения знаний о том, чтобы поддерживать эти и другие функции iOS считайте Многозадачность, Высокое разрешение и Другие Функции iOS.
Реализация механизма рендеринга
Существует много возможных стратегий разработки Вашего OpenGL код для прорисовки ES, полное изложение которого выходит за рамки этого документа. Много аспектов рендеринга проекта механизма универсальны ко всем реализациям OpenGL и OpenGL ES.
Для приобретения знаний о конструктивных соображениях, важных для устройств на iOS, считайте OpenGL Руководство по проектированию ES и Параллелизм и OpenGL ES.
Отладка и профилирование
XCode и Инструменты обеспечивают много инструментов для того, чтобы разыскать проблемы рендеринга и анализ OpenGL производительность ES в Вашем приложении.
Для узнавания больше о решении проблем и улучшении производительности в OpenGL приложение ES считайте Настройку OpenGL Приложение ES.