This is the documentation for Enlighten.
5. ライブラリ
Enlighten はライブラリのコレクションとして配布され、アプリケーションに必要のないものが含まれている場合もあります。特に、最終的なゲームにリンクされることが予想されるライブラリは依存関係を最小限に抑えてあり、プリコンピュート ライブラリに依存しません。プリコンピュート ライブラリには必然的に広範な依存関係があり、Intel TBB など、明白なパフォーマンス上の利点を持ついくつかのサードパーティ ライブラリを参照しています。プリコンピュート ライブラリはランタイム ライブラリとほぼ同じようにリンクできますが、その API は実行ファイルにカプセル化したり、個別のプロセスとして実行できるように設計されています。Enlighten の一部として提供される High Level Build System は、このアプローチを採用し、プリコンピュートを GeoPrecomp2
および GeoConvert
サンプル アプリケーションにカプセル化しています。
すべての Enlighten ライブラリは、必然的にコンパイラーが提供する CRT ライブラリに依存します。できるだけ多くのビルド構成と互換性を持たせるため、各ライブラリのバリエーションを提供し、Visual Studio の各バージョンや各種 CRT リンケージを含めて、さまざまな CRT 構成をカバーしています。
配布レイアウト
Enlighten で配布されるコードは、以下の 2 つのカテゴリに分けることができます。
- プリコンパイルされたライブラリ、ヘッダー、また場合によっては参照用ソース コードとして提供される API コード。
- ソースとして提供されるサンプル フレームワーク コード。
1 つ目のカテゴリのコード (ヘッダー、ライブラリ、およびソース) は、すべて配布パッケージの Src\EnlightenAPI
フォルダーにあります。残りのサンプル フレームワーク コードは、Src\Samples
フォルダーにあります。アプリケーション自体はすべてあらかじめビルドされており、Bin
フォルダーにあります。
ライブラリにソースが付属している場合、ソースとヘッダーの両方が LibSrc
ディレクトリにあります。ソースが付属していない場合、ヘッダーは Include
フォルダーにあります。プリコンパイルされたライブラリは常に Libs
フォルダーにあります。そのため、よくある例として、ランタイム ライブラリをプロジェクトに追加する場合、Libs
フォルダーの適切なライブラリを再度リンクして、Include
フォルダーと LibSrc
フォルダーの両方からヘッダーをインクルードします。
コア ライブラリ
ランタイムとプリコンピュート両方の共通機能です。
ライブラリ名 | ソース | 説明 |
| 低レベル クロスプラットフォーム ライブラリ | |
| 数学、コンテナー、I/O などの共通クラス |
GeoBase は Enlighten のライブラリ依存関係グラフの頂点にあり、他のライブラリすべてが依存しています。GeoCore には、すべてではありませんが、ほとんどのライブラリが依存しています。Enlighten ライブラリにリンクする場合は、これらのライブラリをアプリケーションにリンクする必要があります。
残りの Geo ライブラリは、Enlighten サンプル アプリケーションの実装に使用されるサンプル フレームワークを形成しています。
ランタイム ライブラリ
Enlighten ランタイム機能を有効にするには、最終的な実行ファイルにランタイム ライブラリを含めます。
ライブラリ名 | ソース | 説明 |
低レベル ランタイム APIを使用したリアルタイム ラジオシティ更新に必要です | ||
高レベル ランタイム機能に必要です |
プリコンピュート ライブラリ
プリコンピュート ライブラリは、Windows、OS X、および Linux でのみ利用できます。32 ビット版と 64 ビット版は同一の出力を生成します。最終的な実行ファイルでは、これらのライブラリを必要としませんが、必要に応じて、配布されるコードに自由にリンクできます。
プリコンピュート ライブラリ | ソース | 説明 |
| プリコンピュート パイプラインを駆動する高レベル API | |
| ||
| プリコンピュートで使用される CPU レイトレーサー |
サードパーティ ライブラリ
これらは、ランタイムまたはプリコンピュート、あるいはその両方のビルドに必要です。
サードパーティ ライブラリ | 説明 |
Zlib | zlib 圧縮ライブラリ。中間ファイルを保存するときに High Level Build System で使用されます |
Intel TBB | Intel Threaded Building Blocks ライブラリ。マルチスレッディングを実装するために、プリコンピュート (および必要に応じて Windows ランタイム) で使用されます |
XML | TinyXPath ライブラリ。High Level Build System で XML ファイルの読み書きに使用されます |
ツール ライブラリ
Samples ディレクトリのソース コードを使用すると、GeoRadiosityデバッグ ツールを再ビルドできます。このコードは参照用として使用できますが、これらのライブラリをエンジンに含めることはお勧めしません。
コード規約
Enlighten ライブラリで使用される以下の規約を知っておくと便利です。
- コア ライブラリ コード (GeoBase、GeoCore) は Geo 名前空間に存在します。サンプル以外のすべてのランタイムおよびプリコンピュート Enlighten コードは
Enlighten
にあります。 Enlighten3
ライブラリ (低レベル ランタイム ライブラリ) は、内部でメモリを割り当てたり、ファイル IO を実行したりせず、ユーザー制御下で状態を不透明な API オブジェクトにカプセル化します。これらの操作を必要とする機能 (シリアル化など) は、独自のエンジンで再実装またはそのまま使用できるソースとして付属しているEnlightenUtils.inl
ヘッダー内にあります。- すべてのコードで、1 つ目のファイルとして
GeoBase
\GeoBase.h
をインクルードします。これによって、すべてのコンパイラーおよびプラットフォーム固有の設定の大部分が設定され、基本的なtypedef
が宣言されます。 - Enlighten では STL コンテナーを使用しませんが、<
algorithm
> などのアルゴリズム コンテンツは使用します。すべての STL インクルードは、GeoBase
\GeoStl.h
をインクルードすることで一元的に行われます。 GeoLanguageDefs.h
(追加の CRT インクルード) およびGeoWinDefs.h
(Windows ヘッダーまたは擬似 Windows ヘッダーを含む) にも類似のインクルード規約が存在します。- デフォルトのさまざまな関数呼び出し規約をサポートするために、すべての非メンバー関数の前に
GEO_CALL
を付け、明示的に呼び出し規約を設定します。 - デフォルトのさまざまなクラスおよび構造体パッキング規約をサポートするために、ヘッダーを
#pragma pack(push,16)
でラッピングし、明示的にパッキングを設定します。 - メモリ割り当てはすべて
GeoBase
\GeoMemory.h
を通じて実行されます。デフォルトでは標準のアライメントされたアロケーターまたはmalloc
が使用されますが、MemoryAllocator
インターフェイスを使用するインテグレートでオーバーライドすることもできます。デフォルトのアロケーターをオーバーライドしていない場合には、GeoMemory.h
で利用可能な関数を使用して、一連のメモリ統計をランタイムで取得できます。このメモリ システムはインテグレートでの使用に適しています。 - すべてのメッセージ ログは
GeoBase
\GeoMsgLogger.h
を経由します。これには事前に定義されたログ種別のセットが使用され、必要に応じてハンドラー関数の再呼び出しが行われます。インテグレートによって新しいロガーを追加または削除することができます。