Подтвердить что ты не робот

Выберите OpenGL ES 1.1 или OpenGL ES 2.0?

Я собираюсь начать новый проект 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 или 2.0? И почему? Я предполагаю, что если я выберу openGL ES 2.0, будет слишком много накладных расходов для обратной совместимости с openGL ES 1.1. Но есть много iPhone'ов без поддержки openGL ES 2.0 - как я должен это сделать? Любой опыт там?

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

4b9b3361

Ответ 1

Использовать 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. К ним относятся эффекты, такие как закрашивание мультфильмов и освещение окклюзионной окклюзии, а также позволяющие вам делать что-то интересное, например, выгружать массивные параллельные работы на GPU.

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

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

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

Ответ 2

В основном только iPhone 3G и ранее (снято с производства 2010) и iPod 2-го поколения и ранее (также прекращено сентябрь 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 5-го поколения) теперь OpenGL ES 3.0 по состоянию на ноябрь 2013 года.

Ответ 3

В настоящее время я серьезно сомневаюсь, что там есть какое-то устройство, которое не поддерживает 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 по крайней мере!

Ответ 4

Я выбрал 2.0 только для Cubemap