iPhone如何知道在1.1和2.0之间使用哪种OpenGL ES上下文?
-
04-10-2019 - |
题
我最近一直在挖掘网络,并注意到一些视频教程显示了一个带有一个OpenGL ES上下文的旧模板(PRE SDK 3.2)。现在有两个,我收集到的是较新的Imobile设备上可用的两个版本的OpenGL ES。
我可以只使用较旧的人还是需要做两次的一切?如何告诉iPhone使用旧上下文,还是会自动这样做?
解决方案
默认情况下,模板试图创建ES2上下文,如果失败,则尝试创建ES1上下文。如果您想单独使用ES 1.1(在所有设备上都支持),则可以从模板项目中删除对ES2的所有引用。
其他提示
为了扩展Frogblast所说的话,模板代码定义了两个类: ES1Renderer
和 ES2Renderer
. 。这 EAGLView
班级首先尝试创建一个 ES2Renderer
实例,但是如果那失败了,它会创建一个 ES1Renderer
. 。失败会发生 ES2Renderer
无法使用以下代码设置OpenGL ES 2.0上下文:
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!context || ![EAGLContext setCurrentContext:context] || ![self loadShaders])
{
[self release];
return nil;
}
如果设备支持OpenGL ES 2.0,则应该成功。如果没有,该应用程序又回到了 ES1Renderer
OpenGL ES 1.1渲染器。
该应用程序具有两个不同的渲染类的原因是,OpenGL ES 1.1和2.0具有不同且不兼容的渲染管道。 OpenGL ES 2.0可让您创建可编程的着色器,以获得一些惊人的效果,但是与OpenGL ES 1.1相比,对于简单任务而言,它可能更难使用。
如果他们使用OpenGL ES 2.0,许多人在应用程序中增加了后备,因为只有iPhone 3G S和后来的设备对此进行了支持。但是,如果您正在开发仅iPad应用程序,则可以假设它具有2.0支持。您还可以通过添加该功能将应用程序限制为具有此功能的设备运行 opengles-2
关键 UIRequiredDeviceCapabilities
在您的info.plist中。
您可以在较新的设备上使用OpenGL ES 1.1,因此,如果要禁用2.0渲染路径,则可以在模板中使用EAGLVIEW ES2Renderer
上课,只是与 ES1Renderer
. 。您也可以从 ES1Renderer
并将其放在Eaglview中。