2012-01-31 107 views
3

我想了解Mac上与OpenGL框架集成有关的几件事情,它们以层的形式出现。基本上,当我想了解OS X中存在的3D技术以及OpenGL的实际实现层是哪一层时。CGL vs AGL vs OpenGL vs NSOpenGL vs CoreAnimation(CALayer)

从阅读苹果文档,下面是我迄今了解:

1.NSOpenGLContext对象封装了一个低级别的,特定于平台的OpenGL的核心(CGL)上下文。

=这表明NSOpenGL使用CGL。

2,AGL(苹果图形库)API是Mac OS X的苹果实施的OpenGL的一部分

=那么,这是否AGL和CGL以任何方式有关?

3.CGL(Core OpenGL)是Apple OpenGL实现的最低级编程接口。

=这是否意味着标准OpenGL API只是CGL的封装?

4.CoreAnimation似乎是Core Graphics,Open-GL和Quick-time的组合。但我不确定底层使用什么,我的意思是实际的实现层,是CGL吗?

事情并不完全清楚。尽管如此,我仍然在阅读,过去我曾询问过有关question,但知识不完整。

如果有人能分享他对物质的理解,我将非常感激。

+0

我的理解是,AGL已被弃用(或至少没有积极开发)以支持CGL。 – 2012-01-31 12:36:06

+0

这意味着,他们是独立的技术? – MacGeek 2012-01-31 12:40:18

回答

7

NSOpenGLContext,AGL和CGL都是用于设置可以绘制的OpenGL上下文的API。

使用NSOpenGLContext,除非你已经知道你有一个理由不这样做。

如果您正在编写Carbon应用程序,或者您需要与Mac OS 9兼容(截至2012年,基本上意味着:请勿),请使用AGL。

AGL和NSOpenGLContext都是在CGL之上实现的。但是,并非CGL的所有必要部分实际上都是公共API。上次我查看了CGL API中唯一允许创建全屏OpenGL上下文的公共部分。如果你想在一个窗口中使用OpenGL,或者想要在OpenGL上显示对话框或某些NSViews的选项,则可能不能使用CGL。

CoreAnimation是一个(主要是UI)动画框架;您可以直接使用CoreAnimation而不使用OpenGL。我从来没有用过它,但我认为它也允许你为动画层创建一个OpenGL上下文。如果您已经有其他原因使用CoreAnimation,或者想要以创新的方式组合OpenGL图形和Mac GUI小部件,请使用它。

+0

谢谢。我了解了大部分内容,并且我必须学习核心动画,以便了解核心动画的描述。我仍然有关于OpenGL和CGL如何交互的问题。 CGL是OpenGL for Mac的低级实施吗?我的意思是分层次的层次。 – MacGeek 2012-01-31 13:51:58

+3

“OpenGL”本身假定您已经拥有OpenGL上下文。为了能够在OpenGL上做任何事情,你还需要一个(通常是平台特定的)方法来获得这样的上下文。NSOpenGLContext,AGL和CGL就是这样。假设CGL是OpenGL for Mac的必不可少的伴侣,并且NSOpenGLContext和AGL建立在CGL之上。 – wolfgang 2012-01-31 15:50:16

+0

要在CoreAnimation中使用OpenGL,您可以使用[CAOpenGLLayer](http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CAOpenGLLayer_class/Introduction/Introduction.html)。 – DarkDust 2012-01-31 15:57:54