为 iOS 清理 C++ OpenGL

Clean C++ OpenGL for iOS

我可以在我的 iOS 应用程序中使用干净的 c++ 版本的 openGL 吗?我想写一些基本的包装器,然后将我的 c++ 代码与这个包装器和 App 连接起来。或者我必须只使用 openGLES?使用 GLKit。给我描述所有变体。

iOS 仅支持 OpenGL ES。目前支持的设备只有2.0和3.0,都是可编程的流水线;旧设备是 1.1,这是固定管道。

ES 被集成为核心动画级别。在 GLKit 之前,您需要创建一个图层——合成器可以显示的最简单的东西——并将其构建到视图层次结构中。 CADisplayLink 是绑定设备[虚拟]水平同步的 3.0+ 方式。

GLKit 是独立的,旨在:

  • 提供简单的视图级包装,创建并绑定 GL 上下文、图层、视图和显示 link;
  • 提供与旧的固定功能管道等效的着色器,以便 ES 2.0+ 可以像 1.1 一样容易地用于同一组目的。

用不用由你决定

LLVM 支持的语言之一是 Objective-C++。那是 C++ 和 Objective-C 代码混合在一起,每个都可以调用另一个。您可以轻松地创建一个 Objective-C++ 文件,该文件为所有其他普通 C++ 代码公开一个普通 C++ class,但它在内部进行适当的调用以桥接到 Objective-C 世界.因此,您可能有几百行 Objective-C 来处理 OS 内容并向 C++ 参与者公开您关心的内容。

iOS 根本不支持 OpenGL。您必须为 iOS 台设备使用 OpenGL ES。

您可以在每个 iOS 设备上使用 OpenGL ES 1.1 和 2.0(实际上您只能在 iPhone 3G 上使用 OpenGL ES 1.1,但是最近的 iOS 不支持iPhone 3G)。

您也可以在 Apple A7 和 A8 GPU 设备上使用 OpenGL ES 3.0,例如 iPhone 6.

有关详细信息,请参阅 the Apple document

要在 iOS 上使用 OpenGL ES,您只需 CAEAGLLayer and EAGLContext。 GLKit 只是一个有用的包装器 类 对于那些 类.

设置完这些 类 后,您可以使用 OpenGL ES API 作为其他环境。

顺便说一句,这个项目https://code.google.com/p/gl-wes-v2/在OpenGL ES 2.0环境下提供了一些OpenGL 2.0 APIs。它似乎与 iOS 不兼容,但您可以使用项目中的一些代码。