2012-04-25 3 views
7

Я знаком с основными различиями между OpenGL и OpenGL ES, например. нет glBegin, glEnd, нет квадроциклов и т. д.Руководство по написанию OpenGL и OpenGL ES-совместимого кода?

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

Естественно, это означает, что это соответствует функциям, которые присутствуют в двух API и идентичном синтаксисе, ничего необычного и передового, при этом OpenGL ES 2 является самым низким общим знаменателем.

+0

Возможно, вы найдете интересное чтение [MaliOpenGLESEmulator] (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0511c/BABBIBEA.html) документов. Это эмулятор OpenGL ES (для MAC/ПК), который конвертирует вызовы из OpenGL ES в OpenGL. Они перечисляют некоторые подробности о различии между GL 2.0 и GLES 2.0. Подобно отсутствию (очевидно) данных с фиксированной точкой в ​​GL, спецификаторы точности шейдеров и некоторые другие незначительные вещи. – kerim

ответ

2

Согласно Khronos OpenGL ES является подмножеством настольного OpenGL, поэтому для написания совместимого кода вам просто нужно использовать документацию OpenGL ES.

Цитаты из http://www.khronos.org/opengles/

OpenGL® ES является безвозмездным, кросс-платформенным API для полнофункциональной 2D и 3D график на встраиваемые системах - в том числе игровых приставок, телефонов, бытовой техники и транспортных средств. Он состоит из четко определенных подмножеств рабочего стола OpenGL

EDIT: Как указал Джастин Мейнерс в комментариях, на самом деле есть некоторые различия, когда дело доходит до мелких деталей. Ответ Дэвида К. Бишопа содержит больше информации об этом.

+0

Это неправда. В то время как большая часть кода будет передавать без изменений, это проблемы совместимости. –

+0

@JustinMeiners: Мне любопытно, что эти документированные различия или ошибки в реализации? Я не нашел ни одной из этих проблем совместимости, и в документации khronos по-прежнему используется слово «подмножество». Если на самом деле это не строгое подмножество, я бы хотел обновить свой ответ. –

+0

Некоторыми примерами различий могут быть квалификаторы точности шейдеров, различия в гарантированных размерах. Если вы посмотрите на документ ARB_ES2_compatibility в другом ответе, он описывает все изменения, которые они должны внести, чтобы быть на самом деле совместимыми. –

2

Вы можете быть заинтересованы в новом расширении OpenGL ES совместимости ARB_ES2_compatibility (добавлена ​​в ядро ​​в OpenGL 4.1)

Конечно на самом деле с расширением требуется поддержка новой +4,1 настольного OpenGL, но вы можете прочитать их и увидеть, что должен был получить поддержку ES на рабочем столе и избежать этого в вашем ES-коде как можно больше. Могут быть некоторые вещи, которые просто не совместимы с более старыми версиями OpenGL для настольных компьютеров, хотя, в основном, некоторые шейдерные вещи, такие как точность с плавающей запятой.

Существует также ARB_ES3_compatibility (ядро в OpenGL 4.3), но это, вероятно, безопасно игнорировать, поскольку это для OpenGL ES 3.0).

Смежные вопросы