Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone如何知道在1.1和2.0之间使用哪个OpenGL ES上下文?_Iphone_Ipad_Opengl Es_Iphone Sdk 3.2 - Fatal编程技术网

iPhone如何知道在1.1和2.0之间使用哪个OpenGL ES上下文?

iPhone如何知道在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

我最近一直在网上搜寻,注意到一些视频教程显示了一个带有OpenGL ES上下文的旧模板(SDK 3.2之前)。现在有两个,我收集到的是新iMobile设备上提供的两个版本的OpenGL ES


我可以用旧的还是什么都要做两次?我如何告诉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渲染器。