Core OpenGL(CGL)は、Apple Inc.のMacintosh Quartzウィンドウシステムにおける、 OpenGL仕様のOS X実装へのインターフェースです。CGLは、OpenGLへのX11インターフェースであるGLX、およびOpenGLへのMicrosoft WindowsインターフェースであるWGLに相当します。
OpenGLへのすべてのウィンドウシステムインターフェースは、シリコングラフィックス独自の3Dグラフィックスアプリケーションプログラミングインターフェース(API)であるIrisGLが、現在のオープンスタンダードであるOpenGLに移行した際に生まれました。IrisGLをオープンスタンダードにするという決定が下された際、最も重要な設計変更は、このグラフィックス標準APIをウィンドウシステムに依存しないものにすることでした。そのため、OpenGLへの移行時に、IrisGLからすべてのウィンドウシステム固有のロジックが削除されました。ウィンドウシステムロジックには、キーボードやマウスなどのデバイスからの入力を収集するためのイベントメカニズム、および最新のウィンドウユーザーインターフェースに描画する際に使用されるウィンドウの順序付けやサイズ変更ロジックが含まれます。さらに、ウィンドウメモリバッファ(サーフェスと呼ばれることもあります)の内部管理もすべてIrisGLから削除され、OpenGLが作成されました。
OpenGLはウィンドウシステムに依存しないため、Appleのような企業は、OpenGLレンダリングの対象となるサーフェスの構成と管理という負担を負わなければならない。
OS X では、CGL は OpenGL へのウィンドウ システム インターフェイスの基盤となるレイヤーです。AGL (Apple Graphics Library) と Cocoa (API) (または AppKit) はどちらもOpenGLへのインターフェイスを持ち、論理的なソフトウェア レイヤーであり、その動作は CGL に依存しています。CGL と AGL は自由に相互運用できます。CGL と Cocoa は一緒に使用できますが、Cocoa クラスが暗黙的に CGL の状態を変更する場合があります。AGL と Cocoa からの関数呼び出しを混在させるべきではありません。
これらのサーフェスの構成は、ピクセル フォーマット選択プロセスによって行われ、互換性のあるさまざまなレンダリング レイヤーが組み合わされてフレーム バッファが形成されます。このようなレイヤーの例としては、カラー バッファ、透明度バッファ(アルファ)、ステンシル バッファ、深度バッファなどがあります。このバッファの互換性チェックを実行するには、CGL 関数CGLChoosePixelFormatが使用されます。CGLChoosePixelFormat は、入力パラメータとそのスコアリング ポリシーに基づいて、グラフィックス コマンドの処理に使用される基盤となるレンダラーでサポートされている互換性のあるバッファ構成を表すピクセル フォーマットを選択します。レンダラーは、システムにインストールされているグラフィックス カードに対応するハードウェア ベースのものと、システムのメインCPUがすべてのグラフィックス コマンド処理と最終的なラスタライズ処理を行うソフトウェア ベースのものがあります。
Mac OS X では、CGL は Macintosh システムにおけるグラフィックデバイスのインストールと構成の多様性にも対応しています。Macintosh コンピュータには、任意の数のディスプレイとグラフィックカードが搭載されている可能性があります。このような構成では、ユーザーのデスクトップは、複数のディスプレイに仮想化(拡張)またはミラーリングされ、それらのディスプレイは、同じグラフィックベンダー製である場合もそうでない場合もある複数のグラフィックカードに接続されています。
ユーザーがMacintoshを仮想デスクトップを使用するように設定し、ウィンドウをあるディスプレイから別のディスプレイにドラッグすると、CGLはデバイス間でコマンド処理の一貫性を確保するために、デバイス間でシャドウイングする必要のあるOpenGLグラフィックス状態の管理を処理します。2つの異なるレンダラーでサポートされている2つの異なるディスプレイ間でMacintoshデスクトップを横切ってウィンドウをドラッグすることは、「仮想画面変更」と呼ばれます。
CGLは、現在使用されているレンダラーに関する情報を取得するメカニズムも提供しています。Mac OS X上でOpenGLの状態を保持する主要なデータ構造はCGLContextObjです。これらのCGLコンテキストは、 CGLGetCurrentContextを呼び出すことでいつでも取得できます。その後、 CGLContextObjに対して、それに関連付けられているレンダラーの詳細情報を照会できます。
また、Apple 独自の OpenGLソフトウェア レンダラーも含まれています。元々は、これは単純な整数パッケージでした。Mac OS X 10.3 では、新しい浮動小数点パッケージが導入され、最終的にこれに取って代わりました。ソフトウェアレンダラーは、遅いものの、基本的なアプリケーションには十分な速度で、開発目的でOS X の OpenGL 実装とともに機能が完全な状態に保たれています。