我正在为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的问题。 我没有得到任何错误,我无法真正调试它(“Step into”似乎在这里不起作用)。
答案 0 :(得分:1)
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并支持所有设备。