2011-01-24 5 views
31

Я собираюсь начать новый проект openGL с поперечной платформой (основной для iPhone & ПК). Итак, главный вопрос: ориентация на OpenGL ES 1.1 или OpenGL ES 2.0? Или оба? Пока я читаю Open GL ES 1.1, на самом деле не устарел, не так ли? Итак, что бы говорить о openGL ES 2.0? Программируемая вершина-& fragmentshader - Что-нибудь еще? Я слышал о снижении производительности с альфа-смешиванием или так - может ли это быть правдой? Я предполагаю, что код openGL ES 2.0 также должен запускаться на ПК. Итак, openGL ES 2.0 действительно больше знает о будущем?Выберите OpenGL ES 1.1 или OpenGL ES 2.0?

Другие разработчики все еще кодируют OpenGL ES 1.1 или 2.0? И почему? Я предполагаю, что если я выберу openGL ES 2.0, будет слишком много накладных расходов для обратной совместимости с openGL ES 1.1. Но есть много iPhone'ов без поддержки openGL ES 2.0 - как я должен это сделать? Есть ли у вас опыт?

Я нашел только этот вопрос: OpenGL ES 1.1 or 2.0 on iPhone вид релевантного, но это не очень глубоко о реализации ... Так что любой совет приветствуется! Спасибо огромное!

ответ

52

Следует ли использовать OpenGL ES 1.1 или 2.0, зависит от того, что вы хотите делать в своем приложении и сколько устройств вам нужно для его совместимости. Все устройства iOS поддерживают OpenGL ES 1.1, где только OpenGL ES 2.0 поддерживают только iPhone 3G S и более новые устройства (iPhone 3G S, iPhone 4, iPad и iPod touch третьего и четвертого поколения). Однако все устройства iOS, которые Apple в настоящее время продает, совместимы с OpenGL ES 2.0. Процент устройств, которые не поддерживают OpenGL ES 2.0, падает каждый день. Все iPads поддерживают OpenGL ES 2.0 от запуска, поэтому у вас гарантированно будет поддержка, если вы нацелитесь на этот форм-фактор.

OpenGL ES 2.0 и 1.1 используют разные и довольно несовместимые конвейеры рендеринга. OpenGL ES 1.1 использует конвейер с фиксированной функцией, в котором вы загружаете данные геометрии и текстуры, настраиваете состояние освещения и т. Д., И пусть OpenGL обрабатывает остальное для вас. OpenGL ES 2.0 основан на программируемом конвейере, где вы поставляете вершинные и фрагментарные шейдеры для обработки специфики того, как ваш контент отображается на экране.

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

Однако тот факт, что вы можете написать свои собственные процедуры для работы с вашей геометрией и текстурами и как они отображаются на экране, означает, что OpenGL ES 2.0 позволяет делать то, что просто невозможно (или потребуется огромное количество усилий) в OpenGL ES 1.1. К ним относятся такие эффекты, как закрашивание мультфильмов и освещение окклюзионной окклюзии, а также возможность сделать что-то интересное, например, разгружать массивные параллельные работы с графическим процессором.

Если вы заботитесь, чтобы увидеть некоторые примеры того, что вы можете сделать с OpenGL ES 2.0, видео для класса я преподавал на эту тему можно on iTunes U, и я создал два примера приложения here и here.

Когда дело доходит до кросс-платформенной совместимости, шейдеры уже давно доступны на настольном ПК OpenGL, поэтому все, что вы создаете с использованием OpenGL ES 1.1 или 2.0, должно быть достаточно переносимым на рабочий стол.

Если вы можете сделать рендеринг, который вы хотите в OpenGL ES 1.1, вы можете пойти таким образом, чтобы обеспечить максимальную совместимость устройств. Однако значительная часть используемых сегодня устройств iOS поддерживает OpenGL ES 2.0 (я не могу найти статистику прямо сейчас, но она была основана на отгруженных единицах), и это число будет только расти с течением времени. OpenGL ES 2.0 позволяет вам снимать некоторые потрясающие эффекты (см. Epic Citadel), которые могут помочь вам настроить ваше приложение отдельно от других.

+0

Очень подробный ответ - Спасибо! – Constantin

+0

В дополнение к этому классическому и удивительному ответу, по этой ссылке http://en.wikipedia.org/wiki/List_of_iOS_devices#Features прокрутите вниз до OpenGL ES для достойного отображения ситуации. – Fattie

+1

@Brad Larson: через 1,5 года вы бы дали аналогичный ответ на этот вопрос, или вы принесете [GLKit] (http://developer.apple.com/library/ios/documentation/GLkit/Reference/GLKit_Collection/GLKit_Collection. pdf) как лучший выбор? –

0

В основном толькоthe iPhone 3G and prior (прекративших 2010) и IPod поколения второй и ранее (также прекращено сентябрь 2010) необходимо использовать OpenGL ES 1.0.

Все iPads, iPad mini и iPhone 3GS, поддержка OpenGL ES 2.0. Фактически, любое устройство iOS продано (как совершенно новое устройство) после Сентябрь 2010 года поддерживает OpenGL ES 2.0.

OpenGL ES Поддержка 3,0

Вы не только получаете ES 2.0 поддержки, но iPhone 5S + IPad Air (IPad пятого поколения) в настоящее время OpenGL ES 3.0, по состоянию на ноябрь 2013 г.

0

В настоящее время я серьезно сомневаюсь, что есть какое-то устройство, которое не поддерживает OpenGLES 2.0! Вложите немного больше усилий в OpenGLES 2.0, и вы будете уверены в будущем, тем более, что OpenGLES 3.0 отсутствует. Фактически, я нашел OpenGLES 2.0 проще, чем 1.1, просто потому, что я могу выполнить собственные вычисления матрицы и точно указать, что входит в шейдер.

Другое дело, если вы собираетесь использовать API OpenGLES 1.1, вам необходимо знать, что он фактически реализован как шейдер, и что это не аппаратная штука, если это имеет смысл. OpenGLES 2.0 запускает вершинный шейдер, который реализует конвейер фиксированной функции OpenGLES 1.1.

Это не проблема - OpenGLES 2.0 хотя бы!