【问题标题】:Do the Android and iOS versions of OpenTK have the same API?OpenTK 的 Android 和 iOS 版本是否具有相同的 API?
【发布时间】:2014-02-23 23:21:32
【问题描述】:

我正在尝试使用 Xamarin 进行手机游戏开发;我正在使用 OpenTK 进行渲染。
我的计划如下:
1. 制作一个实际上是游戏的共享库(并且包含所有 openTK 代码)。
2. 为 iOS 和 Android 创建一个可运行的项目,处理特定于平台的内容(例如弹出警报)并使用我的共享库。

openTK 可以做到这一点吗?它在 iOS 和 Android 上是否具有完全相同的 API,只是链接库不同?如果是,如何避免代码重复?

【问题讨论】:

    标签: opengl-es xamarin.ios xamarin.android xamarin opentk


    【解决方案1】:

    你的方法听上去很合理,稍加努力就能奏效。

    原因是 Xamarin.Android 和 Xamarin.iOS 是从库的 alpha 版本中派生出来的,并且演变出稍微不同的 API。大部分 OpenGL ES 绑定是相同的,但有些函数有烦人的(和不必要的)差异,您需要在共享库中使用 #ifdef。

    好消息是 OpenTK 的 Xamarin 分支现已开源,因此我们正在积极寻找解决方案。我已经有一个私有构建的库,它在 Android 和桌面平台之间公开了一个相同的 OpenGL ES API[1],我正在努力修复 iOS 和 Android 版本之间的差异。

    您可以在official github repository关注OpenTK的开发。

    [1] 您可以使用ANGLEARB_ES2_compatibilityARB_ES3_compatibility 扩展在桌面上执行OpenGL ES 代码。这使得 OpenGL ES 成为第一个可以在所有主要平台(Windows、Linux、Mac、Android、iOS 以及未来的 WinPhone 上运行)的图形 API。

    【讨论】:

    • 谢谢!您是否打算在某个时候开源您的 OpenGL 库?由于我需要为 iOS 和 Android 重写东西,使用原生 API 会不会更快?
    • OpenTK 是开源的——源代码可以在opentk/opentk 找到。 Xamarin 基于 OpenTK 0.9.9.3 开发了一个闭源分支,现已在 mono/opentk 开源。我正在积极努力合并这两个版本,一旦准备好我的代码就会推送到 opentk/opentk。
    • 我不确定您所说的“本机 API”是什么意思,OpenTK 直接公开了本机 API。 AFAICT,iOS 和 Android 在 mono/opentk 中的 API 差异源于使用不同的 C OpenGL ES 标头(分别为 Android 和 Apple 版本)。opentk/opentk 直接使用 Khronos 注册表,因此它不会受到这个问题的影响。合并 mono/opentk 和 opentk/opentk 的难点在于确保现有应用程序不会崩溃。
    • @TheFiddler:你知道存储库中的 iOS/Android 代码在哪里吗?我下载了源代码树,但在任何地方都找不到...
    • @PandaPajama:集成版本可以在github.com/thefiddler/opentk/tree/merge2找到(Android和iOS都做了,我们仍然缺少少量枚举以保持API兼容性。)Xamarin版本可以在github.com/mono/opentk/tree/rodo-consolidate-opentk
    猜你喜欢
    • 1970-01-01
    • 2017-11-04
    • 2019-03-17
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    相关资源
    最近更新 更多