2012-01-31 14 views
3

OpenGLフレームワークの統合に関連して、Mac上でレイヤの形でいくつかのことを理解しようとしています。基本的には、基本的にOS Xに存在する3D技術と、OpenGLの実際のimplentationレイヤーを理解したいときです。CGL対AGL対OpenGL対NSOpenGL対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

私の理解は、CGLのためにAGLは推奨されなくなった(または少なくとも積極的に開発されていない)ことです。 –

+0

つまり、それらは独立した技術ですか? – MacGeek

答えて

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)アニメーションのフレームワークです。 OpenGLを直接使用せずにCoreAnimationを使用することができます。私はそれを自分で使ったことはありませんが、アニメーションレイヤのOpenGLコンテキストを作成することもできます。 CoreAnimationを使用する理由が他にある場合、またはOpenGLグラフィックスとMac GUIウィジェットを創造的な方法で組み合わせたい場合に使用してください。

+0

ありがとうございます。私は大部分のことを理解しており、コアアニメーションについてのあなたの説明を理解するためには、コアアニメーションを勉強しなければなりません。私はまだOpenGLとCGLがどのように相互作用しているのかについて質問しています。 CGLはOpenGL for Macを低レベルで実装していますか?階層化された階層という意味です – MacGeek

+3

"OpenGL"は、OpenGLのコンテキストを既に持っていることを前提としています。 OpenGLを使って何かを行うことができるようにするには、そのようなコンテキストを得るための(通常はプラットフォーム固有の)方法も必要です。NSOpenGLContext、AGL、CGLはそのような方法です。 CGLがOpenGL for Macに欠かせない仲間であり、NSOpenGLContextとAGLがCGLの上に構築されているとしましょう。 – wolfgang

+0

CoreAnimationでOpenGLを使用するには、[CAOpenGLLayer](http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CAOpenGLLayer_class/Introduction/Introduction.html)を使用します。 – DarkDust