OpenGL Performer(旧称IRIS Performer、通称Performer)は、アプリケーション開発環境です。[ 1 ] [ 2 ]これは、ハードリアルタイムのビジュアルシミュレーションアプリケーションを実現するためにOpenGL上に構築されたユーティリティコードの商用ライブラリです。 [ 3 ] OpenGL PerformerはSGIによって開発されました。OpenGL Performerは、 IRIX、Linux、および複数のバージョンのMicrosoft Windowsで利用可能です。ANSI CとC++の両方のバインディングが利用可能です。
Performerは1991年に、SGIのOpen Inventorプロジェクト(当時はIRIS Inventorとして知られていた)のグループが、プログラミングの容易さよりもパフォーマンスに重点を置くことを決定したことから誕生しました。Inventorが使いやすいオブジェクトと、それらと対話するためのさまざまなUI要素を提供していたのに対し、Performerはパフォーマンス上の理由から実行時に再配置可能なシーングラフシステムに焦点を当て、レンダリングタスクのさまざまなパスを複数のスレッドで並列に実行できるようにしました。Performerでは、ヒステリシスバンドとフェード機能を使用してシーンの詳細レベルを記述することができました。フレームレートと統計情報が監視され、「ストレス」係数が計算されました。これは、シーンの詳細レベルをさらに重み付けするために使用でき、詳細を削除して目標のフレームレートを維持することができました。
Performerのその他の主要な特徴としては、対称的なマルチプロセッシング機能、複数のグラフィックスパイプのサポート、ハイエンドシステムの拡張可能なリソースを活用できる機能などが挙げられます。この点において、Performerは基盤となる複雑さを考えると、実際には使いやすいものでした。アプリケーションのカリングとレンダリングは、異なる物理プロセッサにロックされた異なるスレッドで実行できます。マルチパイプ(複数のグラフィックスサブシステム)構成では、各グラフィックスパイプへのレンダリングに専用のスレッドが割り当てられ、同様にカリングにも専用のプロセッサが割り当てられます。データベースページング、テクスチャページング、点光源管理(フライトシミュレーション用)、衝突検出のための交差テストといった高度な機能にも専用のプロセッサが割り当てられ、グラフィックスパフォーマンスに悪影響を与えることなく非同期I/Oと処理を実行できます。こうした複雑さのほとんどは、比較的高レベルの設定呼び出しでスレッドとプロセス間通信を設定できる、よりシンプルなシーングラフAPIの下に隠されていました。
Performerにはネイティブのファイルフォーマットがなく、MultiGenのOpenFlightフォーマットローダーなど、サードパーティ製のプラグインローダーしか存在しなかった。同様に、デフォルトのランタイムも存在せず、サンプルコードと、頻繁に使用され、しばしば改変される「perfly」サンプルアプリケーションのみが提供されていた。おそらくこれが、Performerが使いにくいという評判につながった一因だろう。
1990年代半ばまでに、InventorとPerformerを統合できない理由はないことが明らかになり始めました。これが、 SGIがInventorとPerformer(現在は実質的にAPIシム)の両方を構築し、SGIプラットフォームでの将来の作業のための新しい高レベルの標準化されたAPIとして推進しようとしていたCosmo 3Dプロジェクトにつながりました。しかし、Cosmo 3Dの最初のベータ版がリリースされた後、SGIはIntelとIBM(後にDECも)と共同で、実質的にCosmoを改良したOpenGL++を作成しました。このプロジェクトは、SGIがMicrosoftとほぼ同じプロジェクトであるFahrenheitに注力した際に頓挫しました。Fahrenheitもまた中止されました。今日、InventorとPerformerは別々の製品のままであり、統合バージョンはどれも日の目を見ることはありませんでした。
Performerは主に2つのライブラリ、すなわち低レベルのlibprと高レベルのlibpfで構成されています。libprライブラリは、 pfGeoSetとpfGeoStateの概念に基づいた高速レンダリング機能へのオブジェクト指向インターフェースを提供します。pfGeoSetは、ポリゴンや線などのグラフィックスプリミティブの集合です。pfGeoStateは、照明、透明度、テクスチャリングなど、特定のpfGeoSetに関連するプロパティをカプセル化します。
libpfライブラリには、階層型シーングラフの生成と操作、シーン処理(シミュレーション、交差判定、カリング、描画タスク)、詳細度管理、非同期データベースページング、動的座標系、環境モデル、光源点などに関する関数が含まれています。また、このライブラリは、複数のグラフィックスパイプラインにまたがる複数のビューポートを透過的にサポートします。
Performer の他のライブラリ(libpfutil、libpfdb、libpfuiなど) は、最適化されたジオメトリの生成、データベース変換、デバイス入力 (外部フライボックスやMIL-STD-1553マルチプレクサバスとのインターフェースなど)、モーションモデル、衝突モデル、およびOpen Inventor、OpenFlight、Designer's Workbench、Medit、Wavefront .obj ファイルなどの一般的なデータ形式をサポートする形式に依存しないデータベースインターフェイスなどの機能を提供します。