Ответ 1
Прошло около трех лет с тех пор, как я в последний раз занимался какой-либо работой в области ES, поэтому я могу устареть или просто неправильно запомнить некоторые вещи.
-
Нет, ориентация на OpenGL для рабочего стола не равна таргетированию OpenGL ES, потому что ES является подмножеством. ES не реализует функции немедленного режима (
glBegin()
/glEnd()
,glVertex*()
,...). Вершинные массивы являются основным способом отправки материала в конвейер.Кроме того, это зависит от того, какой профиль вы планируете: по крайней мере, в профиле Lite, ES не нужно реализовывать функции с плавающей запятой. Вместо этого вы получаете функции фиксированной точки; думаю, 32-битные целые числа, где первые 16 бит означают цифры до десятичной точки, а следующие 16 бит означают цифры после десятичной точки.
Другими словами, даже простой код может быть неспортивным, если он использует float (вам нужно будет заменить вызовы на функции
gl*f()
на вызовыgl*x()
).Посмотрите, как вы можете решить эту проблему в пример Trolltech (в частности, файл
qtwidget.cpp
; пример Qt, но все же...). Вы увидите, что они делают этот вызов:q_glClearColor(f2vt(0.1f), f2vt(0.1f), f2vt(0.2f), f2vt(1.0f));
Это означает заменить вызов glClearColorf(). Кроме того, они используют макрос
f2vt()
- значение float to vertex type - который автоматически преобразует аргумент из float в правильный тип данных. -
В то время как три года назад я разрабатывал несколько небольших демонстраций для компании, я успешно работал с PowerVR SDK. Это для Visual С++ под Windows; Я не пробовал его под Linux (без работы с ПК).
Небольшое обновление, чтобы отразить мой недавний опыт работы с ES. (7 июня 2011 г.)
- Сегодня платформы, вероятно, не используют профиль Lite, поэтому вам, вероятно, не нужно беспокоиться о десятичных запятых с фиксированной точкой.
- При переносе кода вашего рабочего стола для мобильных устройств (например, iOS), вполне вероятно, вам придется делать в первую очередь эти, а не многое другое:
- заменить
glBegin()
/glEnd()
массивами вершин - замените некоторые вызовы на такие функции, как
glClearColor()
, с вызовами, такими какglClearColorf()
- переписать свою систему окон и ввода
- если вы используете OpenGL ES 2.0 для получения шейдерной функциональности, вы теперь имеете, чтобы полностью заменить конвейер с фиксированной функцией, построенный поведением с шейдерами, - по крайней мере, базовые, которые переопределяют конвейер фиксированной функции
- заменить
- Действительно важно: если ваша мобильная система не ограничена памятью, вы действительно хотите изучить использование сжатия текстур для вашего графического чипа; например, на устройствах iOS, вы будете загружать данные, сжатые PVRTC, в чип.