首页 3D游戏引擎入门课程7——内存管理与插件机制
文章
取消

3D游戏引擎入门课程7——内存管理与插件机制

写在前面

本专栏内容均为学堂在线慕课《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 在这里插入图片描述

本文由作者按照 CC BY 4.0 进行授权

3D游戏引擎入门课程6——事件处理与脚本语言

Qt样式控制:主题切换以及QIcon的源码探析