Frameworkの初期化と終了(Native)
最終更新: 2018年12月20日
起動
CubismFramework::StartUp関数でメモリアロケータとログに関するオプションを設定します。
メモリアロケータがセットされなければ、後に行うCubismFramework::Initialize関数が動作しません。
// C++ LAppAllocator cubismAllocator; //LAppAllocatorはCsm::ICubismAllocatorより継承 Csm::CubismFramework::Option cubismOption; // prepare for Cubism Framework API. cubismOption.LogFunction = LAppPal::PrintMessage; cubismOption.LoggingLevel = Live2D::Cubism::Framework::CubismFramework::Option::LogLevel_Info; Csm::CubismFramework::StartUp(&cubismAllocator, &cubismOption);
第一引数ではメモリ確保のメソッドが登録されたオブジェクトを指定します。
第二引数ではデバッグのレベルやデバッグ用の関数の登録をします。
初期化時にはデバッグ用関数を介し、以下のようにCubsim Core for Nativeのバージョン情報が表示されます。
[CSM][I]Live2D Cubism Core version: 03.00.0003 (50331651)
初期化
CubismFramework::StartUp関数を行った後で、CubismFramework::Initialize関数を呼び出します。
アプリケーションでFrameworkを使用する前に必ず一度だけ呼んでください。
一度も呼ばなかった場合はFramework使用時にエラーになります。
連続で呼んだ場合は処理は無視されます。
ただし後述するCubismFramework::Dispose関数を呼んで終了したあとならば、再度initialize関数を呼んで初期化することができます。
// C++ CubismFramework::Initialize();
終了
CubismFramework::Dispose関数を呼び出すとFrameworkが確保した共通部分のリソースを解放します。
CubismFramework::Initialize関数を呼ぶ前には呼ばないでください。
基本的にはアプリケーションの終了時に呼びます。
例外としてメモリが非常に少ない環境で、必要ないときやライブラリを完全に切り離したいときは、
この関数を呼ぶことでリソースを解放し、次に使うときにまたCubismFramework::Initialize関数を呼ぶ、という使い方もできます。
// C++ CubismFramework::Dispose();
カスタムメモリアロケーター
Frameworkではメモリ確保をカスタマイズすることができます。
ICubismAllocatorクラスから継承したアロケータクラスをCubismFramework::StartUp関数で第一引数に使うことにより、適用されます。
// C++ class ICubismAllocator { public: /** * @brief デストラクタ * * デストラクタ。 */ virtual ~ICubismAllocator() {} /** * @brief アラインメント制約なしのヒープ・メモリーを確保します。 * * @param[in] size 確保するバイト数 * * @return 成功すると割り当てられたメモリのアドレス。 そうでなければ '0'を返す。 */ virtual void* Allocate(const csmUint32 size) = 0; /** * @brief アラインメント制約なしのヒープ・メモリーを解放します。 * * @param[in] memory 解放するメモリのアドレス * */ virtual void Deallocate(void* memory) = 0; /** * @brief アラインメント制約ありのヒープ・メモリーを確保します。 * * @param[in] size 確保するバイト数 * @param[in] alignment メモリーブロックのアラインメント幅 * * @return 成功すると割り当てられたメモリのアドレス。 そうでなければ '0'を返す。 */ virtual void* AllocateAligned(const csmUint32 size, const csmUint32 alignment) = 0; /** * @brief アラインメント制約ありのヒープ・メモリーを解放します。 * * @param[in] alignedMemory 解放するメモリのアドレス * */ virtual void DeallocateAligned(void* alignedMemory) = 0; };
ICubismAllocator::Allocate関数、ICubismAllocator::Deallocate関数は通常のFramework内の動的配列、連想配列、文字列などの領域確保に使用されます。
ICubismAllocator::AllocateAligned関数、ICubismAllocator::DeallocateAligned関数はFrameworkで扱われるcsmMocやcsmModelの領域確保に使用されます。
ICubismAllocator::AllocateAligned関数で確保される領域は第二引数の大きさでアライメントされている必要があります。
アライメントされていない場合、モデルの読み込みに失敗する可能性があります。