iPhone如何知道在1.1和2.0之间使用哪个OpenGL ES上下文?
我最近一直在网上搜寻,注意到一些视频教程显示了一个带有OpenGL ES上下文的旧模板(SDK 3.2之前)。现在有两个,我收集到的是新iMobile设备上提供的两个版本的OpenGL ESiPhone如何知道在1.1和2.0之间使用哪个OpenGL ES上下文?,iphone,ipad,opengl-es,iphone-sdk-3.2,Iphone,Ipad,Opengl Es,Iphone Sdk 3.2,我最近一直在网上搜寻,注意到一些视频教程显示了一个带有OpenGL ES上下文的旧模板(SDK 3.2之前)。现在有两个,我收集到的是新iMobile设备上提供的两个版本的OpenGL ES 我可以用旧的还是什么都要做两次?我如何告诉iPhone使用旧的上下文,或者它会自动这样做?默认情况下,模板尝试创建ES2上下文,如果失败,则尝试创建ES1上下文。如果要单独使用ES 1.1(所有设备都支持),可以从模板项目中删除对ES2的所有引用。默认情况下,模板尝试创建ES2上下文,如果失败,则尝试创建E
我可以用旧的还是什么都要做两次?我如何告诉iPhone使用旧的上下文,或者它会自动这样做?默认情况下,模板尝试创建ES2上下文,如果失败,则尝试创建ES1上下文。如果要单独使用ES 1.1(所有设备都支持),可以从模板项目中删除对ES2的所有引用。默认情况下,模板尝试创建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 es1.1渲染器
应用程序具有两个不同的渲染类的原因是OpenGL ES 1.1和2.0具有不同且不兼容的渲染管道。OpenGL ES 2.0允许您为一些惊人的效果创建可编程着色器,但它比OpenGL ES 1.1更难用于简单任务
如果使用OpenGL ES 2.0,许多人会在应用程序中添加回退,因为只有iPhone 3G S和更高版本的设备支持此API。但是,如果您正在开发一个只支持iPad的应用程序,您可以假定它将支持2.0。通过将opengles-2
键添加到Info.plist中的UIRequiredDeviceCapabilities
,您还可以将应用程序限制在具有此功能的设备上运行
在较新的设备上可以很好地使用OpenGL ES 1.1,因此如果要禁用2.0渲染路径,可以让模板中的EAGLView忽略
ES2Renderer
类,只需使用ES1Renderer
。您还可以从ES1Renderer
中获取OpenGL ES代码,并将其放在EAGLView中。要扩展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 es1.1渲染器
应用程序具有两个不同的渲染类的原因是OpenGL ES 1.1和2.0具有不同且不兼容的渲染管道。OpenGL ES 2.0允许您为一些惊人的效果创建可编程着色器,但它比OpenGL ES 1.1更难用于简单任务
如果使用OpenGL ES 2.0,许多人会在应用程序中添加回退,因为只有iPhone 3G S和更高版本的设备支持此API。但是,如果您正在开发一个只支持iPad的应用程序,您可以假定它将支持2.0。通过将opengles-2
键添加到Info.plist中的UIRequiredDeviceCapabilities
,您还可以将应用程序限制在具有此功能的设备上运行
在较新的设备上可以很好地使用OpenGL ES 1.1,因此如果要禁用2.0渲染路径,可以让模板中的EAGLView忽略
ES2Renderer
类,只需使用ES1Renderer
。您也可以从ES1Renderer
中获取OpenGL ES代码,然后将其放在EAGLView中。模板尝试创建ES2上下文,如果失败,则尝试创建ES1上下文
-这是否意味着它无法在旧设备上工作?我什么都要写两遍<代码>如果希望单独使用ES 1.1(所有设备都支持),只需从模板项目中删除对ES2的所有引用即可。Cool。那些参考资料在哪里?哪个文件?模板尝试创建ES2上下文,如果失败,则尝试创建ES1上下文
-这是否意味着它无法在旧设备上工作?我什么都要写两遍<代码>如果希望单独使用ES 1.1(所有设备都支持),只需从模板项目中删除对ES2的所有引用即可。Cool。那些参考资料在哪里?哪个文件?@Moshe-在模板中,如果您想阻止它使用OpenGL ES 2.0管道,只需注释掉行“renderer=[[ES2Renderer alloc]init];”代码将返回到OpenGL ES 1.1渲染器。@Moshe-在模板中,如果您想阻止它使用OpenGL ES 2.0管道,只需注释掉行“renderer=[[ES2Renderer alloc]init];”代码将返回到OpenGL ES 1.1渲染器。