OpenGl ES 3.0 Context 未在 iPad 上创建(在模拟器中工作)



我正在为PC(Windows,Linux,Mac)和iOS开发跨平台渲染器。iOS部分目前是围绕OpenGL ES 2.0构建的,我想升级到ES 3.0。所以我替换了以下行(有效)

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

用这一行:

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];

。我包括了OpenGLES/ES3/gl.h和OpenGLES/ES3/glext.h。

在模拟器中,这工作得很好,但在实际的iPad上运行它不再工作,上下文为零。

真的不知道我在这里错过了什么,因为iPad运行的是最新版本的iOS(iOS 8.3),并且ES 3.0应该没有问题。我没有收到任何错误,也无法真正调试它("步入"在这里似乎不起作用)。

OpenGL ES 3 在 OpenGL ES 2 上添加的功能依赖于硬件,因此您只能在支持它的硬件上创建 ES3 上下文。如果在创建上下文时恢复nil,则需要回退到 OpenGL ES 2 进行渲染。

支持 ES3 的 iOS 硬件是任何具有 A7 或更好 GPU 的硬件。那是iPad Air,iPad Air 2,iPad mini 2和3,iPhone 5s,6和6加上...大概是后来的任何事情。

请注意,ES3 的 GPU 要求与 Metal 相同,因此,如果您无论如何都要使用回退路径进行多个渲染器,您可能希望全力以赴为这些设备获得最佳性能。

另请注意,ES3 中核心 OpenGL ES 规范中的许多功能在 iOS 中仍可作为 ES2 下的扩展使用。因此,如果您只是在寻找实例化,则可以坚持使用ES2并支持所有设备。

最新更新