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允许您自定义内存记忆分配。
它通过CubismFramework::StartUp函数,将从ICubismAllocator类继承的分配器类作为第一个参数来应用。

// 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函数分配的区域必须与第二个参数的大小对齐。
如果未对齐,则模型可能无法导入。

请问这篇文章对您有帮助吗?
关于本报道,敬请提出您的意见及要求。