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);

제1인수로는 메모리 확보의 메소드가 등록된 오브젝트를 지정합니다.
제2인수로는 디버그의 레벨이나 디버그용 함수의 등록을 합니다.

초기화 시에는 디버그용 함수를 통해 다음과 같이 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 함수로 제1인수에 사용하면 적용됩니다.

// 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 함수로 확보되는 영역은 제2인수의 크기로 정렬되어 있을 필요가 있습니다.
정렬되지 않은 경우 모델을 로드하지 못할 수 있습니다.

이 기사가 도움이 되었나요?
아니요
이 기사에 관한 의견 및 요청사항을 보내 주시기 바랍니다.