Выберите OpenGL ES 1.1 или OpenGL ES 2.0? - PullRequest
31 голосов
/ 24 января 2011

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

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

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

Ответы [ 4 ]

52 голосов
/ 25 января 2011

Использование OpenGL ES 1.1 или 2.0 зависит от того, что вы хотите сделать в своем приложении, и от того, сколько устройств вам нужно, чтобы оно было совместимо. Все устройства iOS поддерживают OpenGL ES 1.1, где только iPhone 3G S и более новые устройства (iPhone 3G S, iPhone 4, iPad и iPod touch 3-го и 4-го поколения) поддерживают OpenGL ES 2.0. Тем не менее, все устройства iOS, которые Apple сейчас поставляет, совместимы с OpenGL ES 2.0. Процент устройств, которые не поддерживают OpenGL ES 2.0, падает каждый день. Все iPad поддерживают 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, видео для класса, который я преподавал по этому предмету, доступно в iTunes U , и я создал два примера приложений здесь и здесь .

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

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

0 голосов
/ 19 февраля 2015

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

0 голосов
/ 14 декабря 2013

В основном только для iPhone 3G и более ранних версий (выпущено в 2010 году) и iPod 2-го поколения и более ранних версий (также прекращено в сентябре 2010 года) необходимо использовать OpenGL ES 1,0.

Все iPad, 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 года.

0 голосов
/ 29 августа 2011

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

...