IOS OPENGL ES 之EAGLContext上下文配置

IOS OPENGL ES 之EAGLContext上下文配置_第1张图片OPENGL  ES在 iOS中的层级关系如图。



IOS应用程序中,每个线程都会维护一个当前上下文。当你的应用程序使用Opengl ES的调用时,线程的上下文就会被那个调用改变。

要设置当前上下文,你可以通过调用EAGLContext类的setCurrentContext:方法。

[EAGLContext setCurrentContext:myContext];

你的应用程序也可以通过EAGLContext类的currentContext方法来获取一个线程的当前上下文。

当你的应用程序设置了一个新的上下文时,EAGL会释放先前的上下文,并且获取新的上下文。


当你的应用程序创建和初始化EAGLContext对象时,可以来决定那种版本的Opengl ES会被支持。创建Opengl ES 2.0上下文时,你的应用程序可以如下初始化:

EAGLContext* myContext = [[EAGLContext alloc]

initWithAPI:kEAGLRenderingAPIOpenGLES2];



共享组最有用的是以下两种情况:

在不同的上下文中,共享的资源不会变化(双缓冲区的实现原理)

当你想要应用程序在一个线程中创建新的Opengl ES对象,而在主线程渲染时。在这种情况下,第二个上下文运行在一个独立的线程中,并且致力于获取数据和创建资源。在所有的资源都加载完成后,第一个上下文绑定到这些对象上,然后立即使用它。

创建多个上下文引用到同一个共享组的方法,首先第一个上下文通过调用initWithAPI:初始化,那么一个共享组就会自动的被创建。然后第二个或者之后的上下文初始化时,就可以通过调用initWithAPI:sharegroup:的方法使用第一个上下文创建的贡献组。第一个上下文通过使用快捷方法。第二个上下文是通过一个扩展的API传递了第一个上下文的共享组从而被创建。

重要:共享同一个共享组的所有的上下文,都必须使用同一个版本的Opengl ES API来初始化上下文。



  1. EAGLContext* firstContext = CreateBestEAGLContext();  
  2. EAGLContext* secondContext = [[EAGLContext alloc] initWithAPI:[firstContext API]  
  3. sharegroup: [firstContext sharegroup]];  



IOS OPENGL ES 之EAGLContext上下文配置_第2张图片









你可能感兴趣的:(OpenGL,ES)