【问题标题】:OpenGL for Android and iPhone适用于 Android 和 iPhone 的 OpenGL
【发布时间】:2009-08-07 05:46:12
【问题描述】:

在与一些同事讨论时,我们想知道为 Android 或 iPhone 开发的 OpenGL 工作是否可以有效地互换,因为两者都支持该规范。

或者,在两个平台之间共享 OpenGL 的现实更多的是一种怪癖、调整,并且不像人们希望的那样容易。

【问题讨论】:

    标签: iphone android opengl-es


    【解决方案1】:

    OpenGL 实现通常由两部分组成: 1.平台特定部分。这具有通常与创建和显示表面相关的功能。 2. OpenGL API。这部分对于OpenGL的具体实现在所有平台都是一样的,以Android为例,OpenGLES 1.0。

    这意味着您的大部分 OpenGL 代码应该易于移植。
    在 C 中,您可能有 glLoadIdentity();
    在 Android 上的 Java 中,类似 gl.glLoadIdentity();

    因此,对于大部分代码,您可以剪切和粘贴,然后搜索和替换像“gl”这样的前缀。

    现在是有趣的部分:您确实需要小心您编码的版本。用于桌面的 OpenGL 具有 OpenGLES 中不存在的 API。还有一些特定于每个平台的 OpenGL 数据类型。此外,您还有 1.0(例如 Android)1.1(例如 iPhone)2.0(例如 iPhone GS)要处理。 API 的差异通常与额外的硬件功能有关,因此您无法编写一些简单的包装器代码来模拟 1.0/1.1 中的 2.0 功能。

    【讨论】:

    • 还应该补充一点,Android 也可以支持 OGLES 1.1 和 2.0,具体取决于 Andriod 的版本。
    【解决方案2】:

    Android 上的 OpenGL ES 是根据 Khronos Java GLES 规范 JSR239 完成的,并将 GL 调用包装在类似 glinst.glBindBuffer(FloatBuffer.wrap(data) ... ) 中 iPhone 上的 OpenGL ES 是使用库存 GL.h 文件完成的,同样的调用看起来就像 glBindBuffer(data...)

    代码将不可互换,并会导致许多怪癖,甚至在您了解 1.0 1.1 和 2.0 API 之间的所有差异之前。

    【讨论】:

      【解决方案3】:

      两个平台都使用 OpenGL ES,但 Wikipedia 声称 Android 使用 1.0,而 iPhone 使用 1.1(原始和 3g)和 3gs link 的 2.0。很可能至少有些程序会使用1.0中不包含的api函数,因此两者之间不会完全兼容(以及3)。

      【讨论】:

        猜你喜欢
        • 2013-01-17
        • 2012-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多