CGL vs AGL vs OpenGL vs NSOpenGL vs CoreAnimation(CALayer)

时间:2012-01-31 11:54:24

标签: objective-c macos opengl core-animation cglayer

我试图通过层的形式了解Mac上与OpenGL框架集成相关的一些事情。基本上当我想了解OS X中存在的3D技术以及哪个层是OpenGL的实际实现层时。

从阅读苹果文档开始,以下是我目前所理解的内容:

1.NSOpenGLContext对象包装一个低级的,特定于平台的Core OpenGL(CGL)上下文。

=这表明NSOpenGL使用了CGL。

2. AGL(Apple Graphics Library)API是Mac OS X中Apple实现OpenGL的一部分。

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

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

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

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

事情对我来说并不完全清楚。我仍然在阅读,我在过去曾问过一些相关的question,但知识不全。

如果有人可以分享他对事情的理解,我真的很感激。

1 个答案:

答案 0 :(得分:7)

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

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

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

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

CoreAnimation是(主要是UI)动画的框架;您可以直接使用CoreAnimation而不使用OpenGL。我自己从未使用它,但我认为它还允许您为动画层创建OpenGL上下文。如果您已经有其他理由使用CoreAnimation,或者您想以创造性的方式组合OpenGL图形和Mac GUI小部件,请使用它。