Переход от OpenGL ES 1.1 к OpenGL ES 2.0

прошло некоторое время с тех пор, как iPhone 3GS вышел, и теперь там might быть достаточной долей рынка OpenGL ES 2.0, поддерживающих устройств, чтобы гарантировать развитие в нем.

но ситуация такова, что многие разработчики, вероятно, уже имеют огромные базы кода в OpenGL ES 1.1

как один transitionf rom ES 1.1 к ES 2.0? Я полагаю, что матрицы нужно заботиться, а также такие вещи, как GL_FOG, GL_CULL, может быть?

можно ли написать "заменители" этих функций, е. g ваш собственный glTranslatef, glPushmatrix и т. д.? Будет ли это означать хит производительности?

какие еще соображения существуют для перехода на ES 2.0? Какие преимущества и недостатки (помимо очевидной проблемы с поддержкой устройств) возникают при использовании любого из них?

глядя на количество тегов es 2.0 по сравнению со стандартными тегами es в stackoverflow, похоже, что еще не время для 2.0.

3 ответов


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

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

vec4 transformedPosition = modelViewProjMatrix * position;

лично Я заменил glRotate () и т. д. функции давным-давно, используя основные вспомогательные функции анимации для эффективного управления матрицей представления модели. Это сделало тривиальным перемещение этого кода в OpenGL ES 2.0.

Jeff LaMarche также имеет чрезвычайно полезный вспомогательный класс для упаковки большей части кода настройки программы шейдеров в своей статье здесь.

отличное руководство по переходу на OpenGL ES 1.1 см. В статье "миграция из OpenGL ES 1.0 в OpenGL ES 2.0", которая является главой в книге GPU Pro и можно найти в документации, которая сопровождает free PowerVR SDK.

Я объяснил, для чего OpenGL ES 2.0 может быть полезен в моих предыдущих ответах здесь и здесь, но, возможно, это будет полезно продемонстрировать до и после в отношении того, что новый API может дать вам.

OpenGL ES 1.1:

OpenGL ES 1.1

OpenGL ES 2.0:

OpenGL ES 2.0

надеюсь, вы увидите выигрыш от замены некоторых встроенных функций шейдерами.


Если у вас есть существующие проекты, я бы не рекомендовал переходить на 2.0, учитывая, что требуемые усилия, скорее всего, больше, чем это стоило бы. Тем не менее, для любых новых проектов нет причин даже беспокоиться о 1.1 больше, на мой взгляд. Большинство устройств, которые были проданы 3GS или 4s, оба из которых более чем способны обрабатывать 2.0.


OpenGL ES 2.0 имеет несколько общих вещей с OpenGL ES 1.1 (в рендеринге я имею в виду). Для каждого рендеринга вам понадобится шейдер. Например, FOG также создается с помощью шейдера. Но у тебя будет больше силы.

+1 к @jer его ответ