【问题标题】:Are there cross-compilable OpenGL examples made with Oxygene?是否有使用 Oxygene 制作的可交叉编译的 OpenGL 示例?
【发布时间】:2013-05-29 06:20:10
【问题描述】:

我们有一个适用于 PC 的 OpenGL 项目(也适用于 Wine 下的 MacOS 和 Linux),我们想尝试交叉编译到平板电脑。 Delphi XE2/XE4 提供 iOS 支持,但还没有 Android,从 iOS 实现历史来看可能需要 1-2 年。现在我们开始研究其他可能性,这将使我们能够保留大部分 Pascal 代码库(80k 行)。所以这里是氧气的问题:

是否有任何使用 Oxygene 制作的 OpenGL 应用程序示例可以交叉编译以在 PC/MacOS/iOS/Android 上运行?

如果没有,有什么替代品(Lazarus 除外)?

【问题讨论】:

  • 我对 Android 的运行时间要乐观得多。我希望今年有所收获。
  • 我也很期待,但是看看 XE3 是如何屏蔽 iOS 的 .. 哦,伙计! xD
  • 现在他们有了 LLVM 工具,新目标很容易。

标签: android delphi opengl-es cross-compiling oxygene


【解决方案1】:

AFAIK 没有。

即使low-level Sugar cross-platform RTL 也没有完成。在以跨平台方式(即使用相同的源代码)(如 OpenGL)访问更高级别的库之前,这是必须完成的第一个步骤。

因此,使用 Oxygene,您拥有一个出色的交叉编译器,但您必须使用每个平台上可用的 RTL。

您可以与两个 object-pascal 编译器进行比较:

【讨论】:

    【解决方案2】:

    Oxygene 不会尝试与 Delphi 兼容。更重要的是,各种 Oxygene 风格使用的运行时库与 Delphi 使用的完全不同。所以你不会找到任何可以在 Oxygene 和 Delphi 上编译的具有单一源代码的严肃库。


    RemObjects 在不同平台上开发 Oxygene 的方式非常有趣,并且与 Embarcadero 与 Delphi 所采用的方式完全不同。

    使用 Delphi 的目标是您可以针对所有平台进行单一源代码开发。 FireMonkey 框架使这成为可能,该框架为所有平台提供了一个通用接口。显然,您需要改变应用的某些元素以解决设备差异。

    使用 Oxygene,每个平台都有单独的目标。所以对于 Windows,运行时是 .net。对于 Java,它是 JVM,对于 Apple 平台,您的目标是 Cocoa。

    这意味着您不能期望在 Oxygene 中编写一个 GUI 应用程序并让它在多个平台上运行。

    因此,您不仅可以在 Delphi 和 Oxygene 之间单一来源您的应用程序,而且您不能轻易地单一来源多个 Oxygene 目标。


    现在,您可以轻松移植到 Oxygene 或 FPC。但是保持单一来源可能意味着更多的努力。这是否值得努力是有争议的。从长远来看,您将需要 Delphi、FPC、Oxygene 或什至完全不同的代码库。但是您不希望您的代码分布在多种语言中。

    【讨论】:

    • 与 Delphi 的源代码兼容性优先级较低。如果它可以满足我们的需求,我们可以将项目迁移到 Oxygene。现在我正在研究 OpenGL 支持。
    • 这个问题的读法完全不同。当我阅读这个问题时,单一来源的能力似乎是一种强烈的愿望。
    • 所以你说似乎 FPC 和 Delphi 有更好的机会保持代码库可交叉编译,而平台之间的变化最少?
    • 是的,单一来源是一种愿望(当然对于一些 IFDEF),但问题是它是否适用于 Oxygene。如果我们完全转向 Oxygene,我们将能够拥有 Win/nix/Mac/iOS/Android。 OpenGL 是重中之重
    • 是的,绝对是这样。还记得 XE2 中使用 FPC 作为编译器的 iOS 支持吗?这是可能的,因为 FPC 的语言模式接近 Delphi。与 Oxygene 相比,没有什么比这更遥远了。另一方面,Oxygene 是一种更纯粹的语言,并且不受必须与 Delphi 保持兼容的限制。
    【解决方案3】:

    您可以使用mapped types 在Oxygene 中编写或拥有OpenGL 层,就像在sugar open source project 中使用的一样。

    听起来很酷。在您的代码中,您只需使用一个在编译期间直接映射到底层平台类方法的类,而无需该层的开销。

    恕我直言,当 Oxygene 增长时,我们会发现很多这样的“糖”层,并且编写一次在任何地方编译都会更接近 :)

    编辑:
    Using OpenGL with .Net
    OpenGL Java Tuturial

    【讨论】:

    • 这很好,但是现在有没有与 Oxygene 交叉编译的 OpenGL 示例?
    • 对不起,我对OpenGL一点也不熟悉。我的意思是,使用现有的 OpenGL 框架,例如.Net 或 Java ...,并围绕它编写一个糖层。在 RemObjects.com 上询问是否已经存在一些示例。
    • 我希望有专门针对 OpenGL 的可用示例,并展示它如何用于交叉编译。毕竟有人必须编写/维护所有这些映射。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    相关资源
    最近更新 更多