OpenGL для Android и iPhone - PullRequest
       20

OpenGL для Android и iPhone

6 голосов
/ 07 августа 2009

При обсуждении с некоторыми коллегами нам было интересно, являются ли работы OpenGL, разработанные для Android или iPhone, взаимозаменяемыми, учитывая, что оба поддерживают спецификацию.

Или реальность совместного использования OpenGL между двумя платформами, скорее случай причуд, твиков и не такой простой, как можно было бы надеяться.

Ответы [ 3 ]

8 голосов
/ 11 августа 2009

Реализация OpenGL обычно состоит из двух частей: 1. Платформенная часть. Эта функция обычно связана с созданием и отображением поверхностей. 2. API OpenGL. Эта часть одинакова на всех платформах для конкретной реализации OpenGL, в случае Android, OpenGLES 1.0.

Это означает, что большую часть вашего кода OpenGL легко переносить.
В C у вас может быть glLoadIdentity ();
В Java на Android что-то вроде gl.glLoadIdentity ();

Таким образом, для большей части вашего кода вы можете вырезать и вставлять, а затем искать и заменять префиксы, такие как 'gl.'

Теперь самое интересное: вам действительно нужно быть осторожным, какую версию вы кодируете. OpenGL для рабочего стола имеет API, которых нет в OpenGLES. Есть также некоторые типы данных OpenGL, специфичные для каждой платформы. Кроме того, вы имеете дело с 1.0 (например, Android) 1.1 (например, iPhone) 2.0 (например, iPhone GS). Различия в API часто связаны с дополнительными аппаратными возможностями, поэтому вы не можете написать какой-нибудь простой код-обертку для эмуляции функций 2.0 в 1.0 / 1.1.

5 голосов
/ 09 августа 2009

OpenGL ES на Android выполняется в соответствии со спецификацией Java GLES Khronos JSR239, и оборачивает вызовы GL в нечто вроде glinst.glBindBuffer (FloatBuffer.wrap (data) ...) OpenGL ES на iPhone выполняется с использованием стандартных файлов GL.h, и тот же вызов будет выглядеть как glBindBuffer (data ...)

Код не будет взаимозаменяемым и вызовет множество причуд, даже до того, как вы попадете в полный беспорядок различий между 1.0 1.1 и 2.0 APis.

1 голос
/ 07 августа 2009

Обе платформы используют OpenGL ES, но Википедия утверждает, что Android использует 1.0, в то время как iPhone использует 1.1 (оригинал и 3g) 2.0 для 3gs link . Вполне вероятно, что по крайней мере некоторые программы будут использовать функции API, не включенные в 1.0, поэтому не будет полной совместимости между 2 (ну 3).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...