カスタムメモリアロケータ【C++】

C++ではLive2Dがメモリの確保をどのように行うかをカスタマイズできます。

LDAllocatorクラスを継承し、各関数をオーバーライドしたものを初期化時に渡します。

以下の用にLive2D初期化時にメモリアロケータを指定します。
指定しない場合は標準のアロケータ(new,deleteなど)が使用されます。
#include "memory/LDAllocator.h"

MyLive2DAllocator myAllocator ;// カスタムメモリアロケータ
Live2D::init( &myAllocator );

アロケータのカスタマイズは以下のコードを参考にしてください。
/************************************************************
* Live2D用メモリ確保命令のカスタマイズ
* live2d::LDAllocatorの仮想関数をオーバーライドする
************************************************************/
class MyLive2DAllocator : public live2d::LDAllocator{
public:

MyLive2DAllocator() {
}

virtual ~MyLive2DAllocator() {
}

//---------------------------------------------------------------------------
// 初期化処理
//
// Live2D::init()から呼ばれる初期化処理。必要に応じて初期化処理を行う
//---------------------------------------------------------------------------
virtual void init(){ }

//---------------------------------------------------------------------------
// 終了処理
//
// Live2D::dispose()の最後に呼ばれる終了処理。必要に応じて終了処理を行う
//---------------------------------------------------------------------------
virtual void dispose(){ }


//---------------------------------------------------------------------------
// malloc
//
// ※初期化時を除いてある程度のサイズ(1024以上)で呼ばれる
//---------------------------------------------------------------------------
virtual void* pageAlloc( unsigned int size , LDAllocator::Type allocType ){
void* ptr ;
switch( allocType ){
case LDAllocator::MAIN: //通常のメモリ
ptr = ::malloc(size) ;
break ;

case LDAllocator::GPU: //GPUに渡す頂点、インデックス、UV
ptr = ::malloc(size) ;
break ;

default: //その他(今後追加する可能性あり)
ptr = ::malloc(size) ;
break ;
}
return ptr ;
}

//---------------------------------------------------------------------------
// free
//---------------------------------------------------------------------------
virtual void pageFree( void* ptr , LDAllocator::Type allocType ){
::free(ptr);
}

} ;


Comments