写在前面
本专栏内容均为学堂在线慕课《3D游戏引擎架构设计基础》中的内容。个人将其转化成文字和图片的版本(个人更加喜欢文字版本的教程,阅读速度更快很多),方便查阅。
原课程链接:3D游戏引擎架构设计基础。
内存管理与插件机制
内存管理和扩展插件概述
内存管理
内存管理是引擎底层和核心内容之一,引擎中几乎所有顶层基类都是内存分配的类,所以内存管理决定了系统的运行效率。
引擎的内存管理从对象可分为CPU主内存和GPU的显卡内存;从操作类型可分为数据结构的分配和释放,以及数据访问。
第三方标准库,如STL、BOOST等,已经提供了各种数据结构的内存分配和管理,使用这些标准库可以简化游戏引擎的底层设计。如STL,将数据类型抽象为容器,将数据组织和算法分离,其中容器主要包括三种:序列容器(vector, deque, list等)、关联容器(map, multimap, set, multiset等)、容器适配器(stack, queue, priority_queue等)。
第三方库还提供了内存分配的保护机制,避免内存指针的使用错误,防止内存泄漏,如shared_ptr,weak_ptr,scoped_ptr等。
动态内存分配是指使用的时候分配内存,不用的时候释放内存,但其开销很大,游戏引擎经常使用定制分配器做动态内存分配,包括:
扩展性
引擎的可扩展性要求:
插件技术:
-
插件是可独立开发的程序块,由系统的插件接口管理。
-
基于插件的体系架构是一种灵活的组件式结构。
-
插件接口股安咯程序可以动态地调用多个插件,而不必或很少修改程序。
-
优点在于:引擎核心功能简洁清晰;插件之间耦合度低,便于维护和修改;引擎根据需要选择插件,提高运行效率。
-
插件接口的设计原则包括:通用性、兼容性、稳定性、可测试性、可维护性。
-
插件管理机制:智能化识别插件,动态判断插件进行安装或卸载;自动化调用;管理插件间的通信;对插件进行初始化和配置管理。
内存管理和扩展插件实现实例
OGRE内存管理和扩展插件
OGRE中内存管理的分类:
OGRE中的智能指针SharedPtr:
OGRE中的GPU Buffer管理:
OGRE中插件的实现机制:
OGRE的插件类Plugin:
OGRE中的plugin.cfg