|
Deki 0.19.0
組み込みディスプレイとデスクトップのためのモジュール式 C++ 2D エンジン
|
ファイル: deki-engine/include/deki/assets/AssetRef.h
アセットを参照するコンポーネントはすべて AssetRef<T> を使います。フィールドは 4 つあります。
| フィールド | 型 | 用途 |
|---|---|---|
| guid | std::string | ディスクからアセットを読み込むための GUID です。常に実在するファイルを指します。 |
| source | std::string | 文脈によって意味が変わるメタデータです。後述の「二重フィールドのパターン」を参照してください。 |
| ptr | void* | 読み込んだアセットへのキャッシュ済みポインターです。最初の Get() で設定されます。 |
| loadAttempted | bool | 再試行の繰り返しを防ぎます。最初の読み込みを試みた後に true になります。 |
Get() は 1 回だけ読み込みを行います。
guid を変更した後に強制的に読み込み直すには、ptr と loadAttempted の両方をクリアする必要があります。
guid と source のフィールドは、アセットの種類によって意味が異なります。これは意図したもので、アーキテクチャ上の実際の違いを反映しています。
| アセットの種類 | guid | source | 理由 |
|---|---|---|---|
| スプライト (単体) | スプライトの GUID | (空) | 単一のファイルで、間接参照はありません |
| スプライト (フレーム) | 親スプライトの GUID | フレームの GUID | 親の .tex ファイルにすべてのフレームが含まれています。guid でファイルを読み込み、source でフレームの領域を特定します。 |
| フォント | バリアントの GUID (ベイク済み) | TTF ソースの GUID | フォントサイズごとに別のファイルです。guid でベイク済みのバリアントを直接読み込みます。 |
| アニメーション | アニメーションの GUID | (空) | 単一のファイル |
コードジェネレーターは次のような ResolveObjectRefs を生成します。
これにより、どちらのフィールドに格納されていても、OnAssetRefResolved は意味のある識別子 (スプライトならフレームの GUID、フォントなら TTF ソース) を受け取ります。
仮想アセットや派生アセットは、GenerateDeterministicGuid() (64 ビット FNV-1a ハッシュを 2 つ使い、UUID 形式に整形) によってシード文字列から生成される決定的な GUID を使います。
| 仮想アセット | シードの形式 | 例 |
|---|---|---|
| フォントのバリアント | sourceGuid + ":" + fontSize | "abc-123:16" |
| フォントのアトラス | sourceGuid + ":" + fontSize + ":atlas" | "abc-123:16:atlas" |
| スプライトのフレーム | parentGuid + ":" + frameIndex | "abc-123:0" |
| プレビュー用フォント | "preview:" + sourceGuid + ":" + fontSize | "preview:abc-123:16" |
"preview:" の接頭辞により、実際のフォントのバリアントの GUID と衝突しないようにしています。
実行時に O(log n) で検索するためのバイナリ形式です。
これらの定数は絶対に変更しないでください。 次の箇所の間で一致している必要があります。
| キーの形式 | 対応先 | 使用箇所 |
|---|---|---|
| "path:type" (例: "textures/player:Sprite") | アセットの GUID | AssetManager::Load<T>("path") |
| GUID 文字列 (例: "abc-123-...") | 同じ GUID | ベイク済みフォントの GUID による直接検索 |
| ファイル | 範囲 | 書き込み元 |
|---|---|---|
| cache/asset_table.bin | プロジェクトのすべてのアセット | AssetPipeline::UpdateAssetTable() |
| <build's assets>/asset_table.bin | 使用されているアセットのみ | AssetExporter::ExportAssetLookupTable() |
ビルドのアセットは、ターゲットが内部ストレージに保存する場合はブートペイロードの隣 (assets/、F:/assets/ として読み込み) に、SD カードの場合は <project>/storage/ (S:/) にエクスポートされます。AssetManager::LoadAssetRoot はテーブル、パックのインデックス、すべてのアセットをそこから読み込みます。platforms.md を参照してください。
| ファイル | 用途 |
|---|---|
| deki-engine/include/deki/assets/AssetRef.h | AssetRef テンプレート |
| deki-engine/src/assets/AssetManager.cpp | GUID の検索、アセットの読み込み |
| deki-engine/include/deki/assets/AssetLookupTable.h | バイナリテーブルの形式と FNV-1a |
| deki-engine/src/Guid.h / .cpp | 決定的な GUID の生成 |
| deki-editor/src/AssetPipeline.cpp | GUID の割り当て、キャッシュの管理 |
| src/services/AssetExporter.cpp | エクスポートのパイプライン |