配置OpenGLES 上下文  译文

翻译

OpenGL ES的每一 实现方式提供了一种方法来创建渲染环境管理由OpenGL ES规范要求的状态 。通过将该状态置于上下文中,多个应用程序可以轻松地共享图形硬件而不干扰其他状态。

EAGLContext 是OpenGLES 渲染上下文的iOS系统的实现方式

在你的应用程序可以调用任何OpenGL ES 功能之前,必须初始化一个EAGLContext对象。EAGLContext类还提供了用于集成OpenGL ES的内容 核心动画的方法。

当前上下文是OpenGL ES的函数调用的目标

在iOS应用程序中每个线程都有一个当前上下文;当你调用OpenGL ES 功能,这是它的状态是由函数调用改变的上下文。
当在一个线程上执行的时候,调用EAGLContext的方法 setCurrentContext:去设置当前线程的当前上下文。
调用 currentContext方法获取当前线程的上下文。

如果你的应用程序在一个线程里面切换两个或者多个上下文,在设置新上下文前需要调用glflush函数。这确保以前提交的命令被及时传递到图形硬件。

OpenGL ES 对 当前上下文EAGLContext对象强引用。当调用setCurrentContext:切换上下文的时候,OpenGL ES 不会在引用上下文对象,所有你自己需要保持一个强引用,以防被dealloc。

每个上下文只支持一个版本的OpenGL ES

一个EAGLContext 对象只支持一个版本的opengl。
所有当创建EAGLContext对象的时候,如果你的设备不支持某个版本的OpenGL,initWithAPI:方法会返回nil。

EAGLContext* CreateBestEAGLContext()
{
   EAGLContext *context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
   if (context == nil) {
      context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
   }
   return context;
}

一个EAGL Sharegroup 管理上下文的OpenGL ES 对象

虽然OpenGL ES管理上下文的状态,它并不直接管理 OpenGL ES的对象。相反, EGLSHAREGROUP对象创建和维护OpenGL ES对象。每个上下文包含一个对象,它代表eaglsharegroup对象产生.
一个sharegroup的优势变得明显,当两个或两个以上的contexts指的是同一个sharegroup,如图2-1所示。当多个上下文连接到一个共同的共享组,所有的上下创建的OpenGL ES的对象可以被所有上下文共享;当你在另一个上下文中绑定了和创建它的上下文相同的对象identifier,那么你就引用了相同的OpenGL ES对象。移动设备上的资源往往是稀缺的;在多个上下文中创建同一内容的多个副本是浪费。共享公共资源可以更好地利用设备上可用的图形资源。
一个共享组是一个不透明的对象;它没有方法或属性供你调用。上下文对sharegroup保持。

图片发自简书App

sharegroups在两个特定的情景下最有用:

  1. 当上下文之间共享的大部分资源是不变的。
  2. 当你希望你的应用程序能够在非主线程中创建新的OpenGL ES对象来渲染。在这种情况下,第二个上下文运行在单独的线程上,专门用于获取数据和创建资源。在加载资源后,第一个上下文可以绑定到对象并立即使用它。这时GLKTextureLoader类 专门用来提供异步的纹理加载。

创建多个上下文引用相同的共享组,第一个上下文是通过调用initwithapi初始化,sharegroup对象自动创建。第二和后来的上下文中被初始化initWithAPI:sharegroup:。清单2-2显示了这将如何工作。

共享一个sharegroup的所有上下文必须使用相同版本的Opengl。

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

当sharegroup被对个上下文共享的时候,管理OpenGL ES objects的状态变化是你的app的责任。下面是规则:

  1. 你的app可以在不同的上下文中访问同一个object 同时地,这个object不能被修改。
  2. 当一个object被yigecontext修改的时候,这个object不能被其他context读写。
  3. 当一个object被修改了,所有的context只有重新bind才能看到改变。当一个context在bind之前就引用了一个object,那么这个object的内容是undefined。

下面是更新一个OpenGL ES对象的步骤:

  1. 所有可能使用这个object的context调用glFlush
  2. 在想修改这个object的上下文下,调用OpenGL方法去修改这个对象。
  3. 在收到state-modifying命令的上下文上面调用glFlush
  4. 在其他context上重新绑定

注意: 另一种方式来共享的对象办法是使用一个单一的渲染上下文,但多个目的帧缓存。在渲染时,你的应用程序绑定适当的framebuffers然后渲染。因为所有的OpenGL ES 对象被一个上下文引用,他们看到同样的OpenGL ES数据 。此模式使用较少的资源,但只适用于单线程应用程序,您可以仔细控制上下文的状态

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容