【问题标题】:CGL vs AGL vs OpenGL vs NSOpenGL vs CoreAnimation(CALayer)CGL vs AGL vs OpenGL vs NSOpenGL vs CoreAnimation(CALayer)
【发布时间】:2012-01-31 11:54:23
【问题描述】:

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

通过阅读苹果文档,以下是我目前所理解的:

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

= 这清楚地表明 NSOpenGL 使用了 CGL。

2.AGL(Apple 图形库)API 是 Apple 在 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,但知识不完整。

如果有人能分享他对事物的理解,我将不胜感激。

【问题讨论】:

  • 我的理解是,AGL 已被弃用(或至少没有积极开发)以支持 CGL。
  • 也就是说,它们是独立的技术?

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


【解决方案1】:

NSOpenGLContext、AGL 和 CGL 都是用于设置 OpenGL 上下文的 API。

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

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

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

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

【讨论】:

  • 谢谢。我了解了大部分内容,我必须研究核心动画才能理解您对核心动画的描述。我仍然有关于 OpenGL 和 CGL 如何交互的问题。 OpenGL for Mac 是 CGL 低级实现吗?我的意思是分层层次结构。
  • "OpenGL" 本身假定您已经有一个 OpenGL 上下文。为了能够使用 OpenGL 做任何事情,您还需要一种(通常是特定于平台的)方法来获取这样的上下文。 NSOpenGLContext、AGL 和 CGL 就是这样的方式。假设 CGL 是 OpenGL for Mac 不可或缺的伴侣,而 NSOpenGLContext 和 AGL 建立在 CGL 之上。
  • 要将 OpenGL 与 CoreAnimation 结合使用,您可以使用 CAOpenGLLayer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 2014-08-17
  • 2011-09-18
  • 1970-01-01
  • 2012-07-27
相关资源
最近更新 更多