未在 iPad 上创建 OpenGl ES 3.0 上下文(在模拟器中工作)
OpenGl ES 3.0 Context not created on iPad (works in Simulator)
我正在为 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 plus...以及可能是后来出现的任何东西。
请注意,ES3 的 GPU 要求与 Metal 的相同,因此如果您打算使用后备路径进行多个渲染器,您可能想要全力以赴以获得最佳性能对于那些设备。
另请注意,作为 ES3 中核心 OpenGL ES 规范一部分的许多功能在 iOS 中仍可作为 ES2 下的扩展使用。因此,如果您只是在寻找实例化,那么您可以坚持使用 ES2 并支持所有设备。
我正在为 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 plus...以及可能是后来出现的任何东西。
请注意,ES3 的 GPU 要求与 Metal 的相同,因此如果您打算使用后备路径进行多个渲染器,您可能想要全力以赴以获得最佳性能对于那些设备。
另请注意,作为 ES3 中核心 OpenGL ES 规范一部分的许多功能在 iOS 中仍可作为 ES2 下的扩展使用。因此,如果您只是在寻找实例化,那么您可以坚持使用 ES2 并支持所有设备。