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関数で確保される領域は第二引数の大きさでアライメントされている必要があります。
アライメントされていない場合、モデルの読み込みに失敗する可能性があります。

この記事はお役に立ちましたか?
はいいいえ
この記事に関するご意見・
ご要望をお聞かせください。