知識ベース

コアOpenGL

Core OpenGLまたはCGLは 、Apple Inc.のOpenGL仕様のOS X実装へのMacintosh Quartzウィンドウシステムインターフェイスです。 CGLは、OpenGLのX11インターフェイスであるGLXと、OpenGLのMicrosoft WindowsインターフェイスであるWGLに類似しています。

歴史

OpenGLへのすべてのウィンドウシステムインターフェイスは、Silicon Graphics独自の3Dグラフィックアプリケーションプログラミングインターフェイス(API)IrisGLの現在のオープンスタンダードフォームOpenGLへの移行から生まれました。 IrisGLをオープンスタンダードにする決定が下されたとき、主に必要な設計変更は、このグラフィックス標準APIウィンドウシステムを不可知にすることでした。そのため、OpenGLに移行するときに、ウィンドウシステム固有のすべてのロジックがIrisGLから削除されました。ウィンドウシステムロジックには、キーボードやマウスなどのデバイスから入力を収集するためのイベントメカニズム、および最新のウィンドウユーザーインターフェイスに描画するときに使用されるウィンドウの順序付けまたはサイズ変更ロジックが含まれます。さらに、サーフェスと呼ばれることもあるウィンドウメモリバッファの内部管理もすべて、OpenGLを作成するためにIrisGLから削除されました。

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の不均一性の処理

Mac OS Xでは、CGLは、Macintoshシステムでのグラフィックデバイスのインストールと構成の異種の性質を処理する役割も担います。 Macintoshコンピューターには、任意の数のディスプレイとグラフィックカードがインストールされている場合があります。これらの構成では、ユーザーのデスクトップは、同じグラフィックベンダーの複数のグラフィックカードに接続されている複数のディスプレイに仮想化(拡張)またはミラーリングされます。

レンダリングの制御

仮想デスクトップを使用するようにMacintoshを構成し、1つのディスプレイから別のディスプレイにウィンドウをドラッグすると、CGLはデバイス間のコマンド処理の一貫性を提供するためにデバイス間でシャドウイングする必要があるOpenGLグラフィックス状態の管理を処理します。 2つの異なるレンダラーでサポートされている2つの異なるディスプレイ間で、Macintoshデスクトップ上でウィンドウをドラッグすることを「仮想スクリーン変更」と呼びます。

CGLは、現在使用されているレンダラーに関する情報を取得するメカニズムも提供します。 Mac OS XでOpenGLの状態を維持する主要なデータ構造は、CGLContextObjです。これらのCGLコンテキストは、CGLGetCurrentContextの呼び出しを使用していつでも取得できます。次に、 CGLContextObjに関連付けられているレンダラーの詳細を照会できます。

ソフトウェアレンダラー

Appleの社内OpenGLソフトウェアレンダラーも含まれています。当初、これは単純な整数パッケージでしたが、10.3では最終的にそれを置き換える新しい浮動小数点パッケージが導入されました。ソフトウェアレンダラーは低速ですが、基本的なアプリケーションには十分に高速であり、開発目的でOS XのOpenGL実装を使用して機能を完全に保持します。