menu
版本
2024.1.4.8780
2024.1.4.8780
2023.1.12.8706
2022.1.18.8567
2021.1.14.8108
2019.2.15.7667
2019.1.11.7296
2018.1.11.6987
2017.2.10.6745
2017.1.9.6501
2016.2.6.6153
2015.1.9.5624
2024.1.4.8780
2023.1.12.8706
2022.1.18.8567
2021.1.14.8108
2019.2.15.7667
2019.1.11.7296
2018.1.11.6987
2017.2.10.6745
2017.1.9.6501
2016.2.6.6153
2015.1.9.5624
Wwise SDK 2024.1.4
|
Wwise 声音引擎的所有模块都通过 AK::MemoryMgr 接口访问内存。声音引擎的客户程序负责此接口的初始化和终止。
SDK 以 静态库 (AkMemoryMgr.lib)的方式提供了一个默认实现。为了使用此库,客户端需要包含 AkModule.h 头文件并调用 AK::MemoryMgr::Init 初始化函数。
请参阅 构建配置 了解有关 AkMemoryMgr.lib 和其它库的使用的更多信息。
在默认实现中,可使用 AK::MemoryMgr::GetDefaultSettings 获取默认初始化设置。
在默认情况下,所有内存都是由 Wwise 通过内置 AkMemoryArena 分配的。各个 AkMemoryArena 可使用 AkMemSettings::memoryArenaSettings
数组单独进行配置。最多可配置四个 AkMemoryArena:
AkMemoryMgrArena_Primary
:大部分内存类别所用的默认 AkMemoryArena。AkMemoryMgrArena_Media
:该 AkMemoryArenaMedia 用于 Media 内存类别的内存分配(一般在加载 SoundBank 时实现)。AkMemoryMgrArena_Profiler
:该 AkMemoryArenaMedia 用于 Profiler 和 Monitor Queue 内存类别的内存分配。Release 构建配置中没有此 AkMemoryArena。AkMemoryMgrArena_Device
:该 AkMemoryArena 用于处理特定于设备的内存分配。只有使用设备特定内存实施音频处理的平台(即定义了 AK_DEVICE_MEMORY_SUPPORTED
的平台)有此 AkMemoryArena。建议为各个 AkMemoryArena 实现以下回调以便集成到游戏引擎中。这样 AkMemoryArena 便可根据需要利用回调来获取和释放内存跨度。
AkMemoryArenaSettings::fnMemAllocSpan
AkMemoryArenaSettings::fnMemFreeSpan
另外,还可使用 AkMemoryArenaSettings::uMemReservedLimit
对各个 AkMemoryArena 可预留多少内存设定限制。
如需了解配置 AkMemoryArena 时可用的其他设置,请参阅 AkMemoryArena 的配置和调整 章节。
若要全部改用自定义内存分配器,请重写以下各项回调:
在设置 AkMemType_Device
位后,上述分配函数必须通过返回设备内存来与该位协调一致。
info | 备注: 在使用自定义内存分配器时,无法在 Wwise 中对 AkMemoryArena 实施性能分析。 |
使用以下设置来启用额外的运行时调试功能:
该不透明值允许自定义实现根据需要定义任意数量的内存调试功能。默认实现提供两个级别。
使用以下设置将所有分配转储到文件中(注意,此时须将 AkMemSettings::uMemoryDebugLevel 设为 1,并采用非 Release 配置):
注:声音引擎使用 AK::IAkStreamMgr::CreateStd() 打开播放流以供写入。若使用 Stream Manager 的默认实现,则在底层 IO 接口 AK::StreamMgr::IAkLowLevelIOHook::BatchOpen() 的实现中执行文件打开功能。
使用以下设置来监控专门为调试分配的内存池(Release 配置中并不会使用这些内存池):
上述调试函数并不能替代分配函数;它们只是针对各个内存分配事件的通知回调。
有关更多信息,请参阅以下各节:
客户端可提供 AK::MemoryMgr 接口的自定义实现。AkMemoryMgr.h 中定义的所有函数全部都要实现。AkModule.h 在 AK::MemoryMgr 命名空间中定义的函数不必实现,因为它们只针对内存管理器的默认实现。
跟在改写 AkMemSettings
的各个分配函数时一样,要想编写新的 AK::MemoryMgr 实现,必须注意在设置 AkMemType_Device
位后通过返回设备内存来与该位协调一致。设备内存分配仅适用于部分平台,且必须与特定参数协调一致(详见平台特定章节)。