banner
Olimi

Olimi

SCUT 小菜鸡
github
bilibili

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
在這裡插入圖片描述

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。