Переход с OpenGL ES 1.1 на OpenGL ES 2.0 - PullRequest
8 голосов
/ 03 мая 2011

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

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

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

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

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

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

Ответы [ 3 ]

17 голосов
/ 03 мая 2011

Не просто переходите по активности в тегах переполнения стека, пытаясь определить, использовать 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 () и т. Д. давным-давно, используя вспомогательные функции Core Animation для управления тем, что эффективно представляет собой матрицу представления модели. Это позволило легко переместить этот код в OpenGL ES 2.0.

У Джеффа ЛаМарша также есть чрезвычайно полезный вспомогательный класс для переноса большей части кода установки вашей программы шейдера в его статье здесь .

Прекрасное руководство по переходу на OpenGL ES 1.1 см. В статье «Переход с OpenGL ES 1.0 на OpenGL ES 2.0», которая является главой в книге GPU Pro и находится в документация, прилагаемая к бесплатному PowerVR SDK .

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

OpenGL ES 1.1:

OpenGL ES 1.1

OpenGL ES 2.0:

OpenGL ES 2.0

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

1 голос
/ 03 мая 2011

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

+ 1, чтобы ответить на его вопрос

1 голос
/ 03 мая 2011

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

...