Существуют ли кросс-компилируемые примеры OpenGL, сделанные с помощью Oxygene?
У нас есть работающий проект OpenGL для ПК (работает на MacOS и Linux также под Wine), который мы хотим попробовать кросс-компилировать для планшетов. Delphi XE2/XE4 предлагает поддержку iOS, но Android пока нет, и, судя по истории внедрения iOS, это может занять 1-2 года. Теперь мы начнем изучать другие возможности, которые позволят нам сохранить большую часть кодовой базы Pascal (80 тыс. Строк). Итак, вот вопрос для Oxygene:
Есть ли примеры приложений OpenGL, созданных с помощью Oxygene, которые можно кросс-компилировать для работы на ПК /MacOS/iOS/Android?
Если нет, то какие есть альтернативы (кроме Лазаря)?
3 ответа
AFAIK нет ни одного.
Даже кросс-платформенный RTL низкого уровня сахара не закончен. Это был бы первый обязательный шаг, который нужно сделать перед доступом к библиотекам более высокого уровня кроссплатформенным способом (то есть с идентичным исходным кодом), например, OpenGL.
Так что с Oxygene у вас есть отличный кросс-компилятор, но вы обязаны использовать RTL, доступный на каждой платформе.
Вы можете сравнить с двумя объектно-паскаль компиляторами:
- С FreePascal, который имеет встроенные модули OpenGL и уже несколько библиотек над ним - одним из самых мощных / известных является GLScene;
- С SmartMobileStudio, который имеет встроенную поддержку WebGL и может делать удивительные вещи в современных браузерах - WebGL представляет собой перевод API/ концепций OpenGL в HTML5.
Oxygene не пытается быть совместимым с исходным кодом Delphi. Более того, библиотеки времени выполнения, используемые различными разновидностями Oxygene, полностью отличаются от библиотек, используемых Delphi. Таким образом, вы не найдете серьезных библиотек с одним источником, которые можно компилировать в Oxygene и Delphi.
Способ, которым RemObjects разрабатывал Oxygene на разных платформах, довольно интересен и радикально отличается от подхода, принятого Embarcadero с Delphi.
Цель Delphi состоит в том, чтобы вы могли разрабатывать единый исходный код для всех платформ. Это стало возможным благодаря платформе FireMonkey, которая представляет общий интерфейс для всех платформ. Очевидно, вам нужно изменить некоторые элементы приложения, чтобы учесть различия в устройстве.
С Oxygene каждая платформа нацелена отдельно. Так что для Windows время выполнения.net. Для Java это JVM, а для платформ Apple вы нацелены на Cocoa.
Все это означает, что вы не можете ожидать, чтобы написать приложение с графическим интерфейсом в Oxygene и заставить его работать на нескольких платформах.
Таким образом, вы не только можете использовать одно приложение между Delphi и Oxygene, но и не можете легко получить несколько источников Oxygene.
Теперь вы можете, вероятно, перенести на Oxygene или FPC без особых проблем. Но поддержка единого источника может означать гораздо больше усилий. Независимо от того, что стоит усилий, является спорным. В долгосрочной перспективе вам понадобится кодовая база в Delphi, FPC, Oxygene или даже в чем-то совершенно ином. Но вы не захотите, чтобы ваш код распространялся на несколько языков.
Вы можете написать или создать собственный слой OpenGL в Oxygene с использованием сопоставленных типов, как это используется в сахарном проекте с открытым исходным кодом.
Звучит довольно круто. В вашем коде вы должны просто использовать один класс, который во время компиляции прямо сопоставляется с методом класса базовой платформы, без накладных расходов этого уровня.
ИМХО, когда Oxygene растет, мы тогда найдем много таких "suger" слоев и напишем, как только компиляция куда-нибудь приблизится:)
Редактировать:
Использование OpenGL с.Net
OpenGL Java Tuturial