iPad/X 平台上的 OpenGL ES 应用程序:C++ 还是 Objective-C?

Posted

技术标签:

【中文标题】iPad/X 平台上的 OpenGL ES 应用程序:C++ 还是 Objective-C?【英文标题】:OpenGL ES App on iPad/X-Platform: C++ or Objective-C? 【发布时间】:2010-09-12 05:41:05 【问题描述】:

我希望这有一个技术(而不是宗教)的答案,但我想知道是否应该使用 Objective-C 或 C++ 在 iPad 上创建 OpenGL ES 应用程序?

由于最终目标也是在 Windows 和 OS X 上编译它,我倾向于使用 C++(并且只将 ObjC 用于我必须使用的东西:App Delegate 等),但我的选择为零具有 Objective-C 开发经验。

我可以与来自 Objective-C 的 C++ 类进行交互吗?是否有任何令人信服的理由使用 ObjC 而不是 C++?

还是应该只使用普通的旧 C 语言?

【问题讨论】:

您可以在 Obj-C 程序中使用 C++。结果称为Objective-C++。但是,对象模型不会混合 - 您可以在代码中同时使用这两者,但不能例如从 C++ 类派生 Obj-C 类,反之亦然。 (编辑:这个问题现在已经有 10 多年的历史了,比 Swift 早了几年。) 【参考方案1】:

您可以,它称为 Objective-C++,您需要做的就是确保您的源文件具有 .mm 扩展名,以便将它们视为混合的 Objective-C/C++ 源文件。

也就是说,一般来说,如果您的目标是跨平台 GLES 支持,请尝试用 C++ 编写常见的东西,以及其他任何东西,Objective-C(您需要在其中设置您的 EAGLLayer 等.)。这可能最适合您的目的,因为我认为您已经熟悉 C++。

【讨论】:

【参考方案2】:

您需要 Objective-C 来访问苹果提供的触控和其他一些库。使用 .mm 使其成为 Objective-C++,因此您可以同时使用。

但为了可移植性,仅在需要时使用 Obj-C。另外,我想提一下的是,OpenGL ES 适用于嵌入式系统,而不适用于 Mac OS X 或 Windows,您需要使用 OpenGL,是的,它们是不同的。

【讨论】:

【参考方案3】:

C++ 和 Objective-C 可以混合(如同 Objective-C++),尽管 C++ 类不能从 Objective-C 类继承,反之亦然。您还必须注意在 Xcode 中设置编译器标志,以便 Objective-C 对象根据需要调用您的 C++ 构造函数和析构函数。

至于你应该使用哪个:任何一个都可以。 Objective-C 至少对于应用程序的面向用户的部分是必需的,因为您需要它来创建窗口、OpenGL 上下文等。但是如果需要,您的逻辑和引擎可以是 C++ 甚至是 ARM 程序集.

【讨论】:

【参考方案4】:

这本书iPhone 3D Programming 可能会让您感兴趣。本书的理念是尽可能少地使用 Objective-C。所有的渲染代码都是用可移植的 C++ 编写的。

【讨论】:

以上是关于iPad/X 平台上的 OpenGL ES 应用程序:C++ 还是 Objective-C?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 上的 OpenGL ES 多个没有索引的 VBO

如何确定Android OpenGL ES上的最大纹理内存

OpenGL ES 可不可以实现多线程共享 纹理

我的OpenGL学习进阶之旅OpenGL ES对Android平台的支持情况

我的OpenGL学习进阶之旅OpenGL ES对Android平台的支持情况

[图形学] 基于OpenGL ES 3.0的高效目标变形动画