OpenGL для Android и iPhone

Я нашел это на сайте Sun:

Несколько Одиночных элементов, Одновременно Загруженных Различными Загрузчиками Класса

, Когда два загрузчика класса загружают класс, у Вас на самом деле есть две копии класса, и у каждого может быть его собственный экземпляр Singleton. Это особенно релевантно в сервлетах, работающих в определенных механизмах сервлета (iPlanet, например), где каждый сервлет значением по умолчанию использует свой собственный загрузчик класса. Два различных сервлета, получающие доступ к совместной Singleton, на самом деле, получат два различных объекта.

Несколько загрузчиков класса происходят чаще всего, чем Вы могли бы думать. Когда браузеры загружают классы из сети для использования апплетами, они используют отдельный загрузчик класса для каждого адреса сервера. Точно так же Jini и системы RMI могут использовать отдельный загрузчик класса для различных кодовых баз, с которых они загружают файлы класса. Если Ваша собственная система использует пользовательские загрузчики класса, все одинаковые, проблемы могут возникнуть.

, Если загружено различными загрузчиками класса, два класса с тем же именем, даже то же имя пакета, рассматривают как отличные - даже если на самом деле они - байт для байта тот же класс. Различные загрузчики класса представляют различные пространства имен, которые отличают классы (даже при том, что имена классов являются тем же), так, чтобы два MySingleton классы были на самом деле отличны. (См. "Загрузчики класса как Механизм Пространства имен" в Ресурсах.), Так как два объекта Singleton принадлежат двум классам того же имени, будет казаться на первый взгляд, что существует два объекта Singleton того же класса.

Цитата .

В дополнение к вышеупомянутой проблеме, если firstTime() не синхронизируется, у Вас могли бы быть проблемы поточной обработки там также.

6
задан genpfault 26 May 2011 в 15:46
поделиться

3 ответа

Реализация 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.

8
ответ дан 8 December 2019 в 17:25
поделиться

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

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

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

1
ответ дан 8 December 2019 в 17:25
поделиться

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

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

5
ответ дан 8 December 2019 в 17:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: