iphone上的OpenGL上下文。它做什么/它是如何工作的?

时间:2012-03-05 02:29:01

标签: iphone ios opengl-es opengl-es-2.0

我一直试图在iPhone上了解OpenGL ES 2.0已经有一段时间了,我已经能够让它在某些方面工作了。但有一点我真的无法理解。什么是OpenGL上下文?或者它的用途是什么?

我知道opengl在没有创建的情况下无法工作。但我想有人告诉我它到底是什么。

因为在做OpenGL时你甚至必须确保EAGL上下文是当前的。由于我没有必要创造其他人,所以我从来没有注意确保它是现在的。

我也创造一个并传递它?

我是否必须销毁它如果我要停止使用OpenGL?

为什么我可以将对象(如glkview)的上下文指针指向我创建的EAGL上下文?它是特定于对象的吗?

我知道这可能是一个非常奇怪的问题,但即使我尝试在谷歌或这里寻找答案,我也找不到简洁的答案。

由于

1 个答案:

答案 0 :(得分:1)

OpenGL上下文封装了OpenGL实例的整个状态。因此,创建上下文是初始化OpenGL的方法,并且设置上下文是系统能够理解您稍后引用纹理,帧缓冲等的名称所必需的。因此,多个上下文的明显使用仅仅是封装OpenGL状态,而不是让一切都变得隐含全局。

OpenGL是一种高度模态的API,因此初步认为线程并不安全。但是,上下文仅与单个线程关联,iOS允许共享组,这些组是可以使用相同命名资源的上下文集合(需要进行一些小的手动同步)。到目前为止,多个上下文的最常见用途是允许后台准备昂贵的资源(例如加载大纹理)而不会中断主线程上的用户体验。

如果您已完成上下文以允许将资源返回到系统,则应该销毁该上下文。 GLKView在init处获取上下文,并通过context属性公开其当前上下文以进行获取和设置。