<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(八)—— 终篇总结
2021SC@SDUSC
開源游戲引擎 Overload 代碼模塊分析 之 OvGame(八)—— 終篇總結
目錄
- 前言
- 回顧
- 1、.rc
- 2、Utils
- 3、Debug
- 4、Core
- 5、Main.cpp
- 總結
前言
本篇是開源游戲引擎 Overload 模塊 OvGame 的最后一篇了。本篇,筆者將對 OvGame 做一個簡單的總結。
另外,想先大致了解 Overload 可前往這篇文章,想看其他相關文章請前往筆者的 Overload 專欄自主選擇。
回顧
OvGame 模塊是一個執行文件,其作用是 調用 Overload 的庫及資源,實現游戲的運行展示。它包含了三個文件夾:Core、Debug、Utils,以及一個 Main.cpp 主函數;其次,它還使用了 .rc 文件 以及 resource.h 文件,現在讓我們一一簡單回顧一下吧(已附上鏈接):
1、.rc
.rc 文件本質是一個 .txt (文本)文件,一般配合 .h 文件(resource.h)使用;作為一個資源集合包,能引入各種文件,例如腳本、位圖、窗口、圖標等等。
詳見:<2021SC@SDUSC> 開源游戲引擎 Overload 代碼模塊分析 之 OvGame (一)—— 概況與 .rc 文件
2、Utils
核心是一個 FPSCounter 類,作用是生成一個顯示幀速率的面板;因此,也公有繼承了許多 Overload::OvUI::Panels 下的類。
詳見:<2021SC@SDUSC> 開源游戲引擎 Overload 代碼模塊分析 之 OvGame(四)—— Utils(終)大綱及 FPSCounter & Debug(上)大綱及 DriverInfo
3、Debug
核心是三個類:DriverInfo、FrameInfo、GameProfiler。
DriverInfo 類負責生成顯示 Driver Information,驅動程序(硬件和軟件)信息,的面板;同樣也公有繼承了許多 Overload::OvUI::Panels 下的類。而該類顯示信息的方式核心是調用 glfw 的 glGetString(),能根據給出名稱來獲得所需的信息。
詳見:<2021SC@SDUSC> 開源游戲引擎 Overload 代碼模塊分析 之 OvGame(四)—— Utils(終)大綱及 FPSCounter & Debug(上)大綱及 DriverInfo
FrameInfo 類可以生成 Frame Information,框架信息,的展示面板,也繼承了 OvUI 的 PanelUndecorated 類;該類是直接讀取結構體 FrameInfo 中的數據,顯示出三角形個數、批次數、實例數的信息。
GameProfiler 類可以生成 Profiling Information,配置文件信息,的面板;該類具體展示的是一個操作的 “Action | Total duration | Frame Duration | Frame load | Total calls” 的內容。
詳見:<2021SC@SDUSC> 開源游戲引擎 Overload 代碼模塊分析 之 OvGame(五)—— Debug(下)FrameInfo & GameProfiler
4、Core
核心是四個類:Application、Context、Game、GameRenderer;它們之間是不獨立,層層調用(包括了上文的 Utils 和 Debug)關系。
首先,最底層的 Context 類,負責處理引擎的環境設置。該類包含了大量的公有 unique_ptr 智能指針,這些指針指向了 Overload 的各個重要模塊,從而實現集合調度;因此,該類能夠設置包括:資產路徑、基礎配置、窗口、圖形環境、音頻、物理引擎、服務、腳本等。
詳見:<2021SC@SDUSC> 開源游戲引擎 Overload 代碼模塊分析 之 OvGame(二)—— Core(一)大綱與 Context
其次,疊上一層 GameRenderer 類,引入上述的 Context 類,負責游戲界面的渲染工作;使用的 OpenGL 接口,實現場景渲染、引擎 UBO(OpenGL 緩沖對象)設置、更新光照 SSBO(GLSL 緩沖對象)等。
詳見:<2021SC@SDUSC> 開源游戲引擎 Overload 代碼模塊分析 之 OvGame(三)—— Core(二)GameRenderer
而后,再疊上一層 Game 類,引入了上述的 Context 類與 GameRenderer 類,以及 Utils 與 Debug 文件;該類負責處理游戲邏輯,其重要的操作是:從 PreUpdate() 啟用輸入和事件、經過 Update() 更新、到 PostUpdate() 結束輸入輸出緩存的一套邏輯更新(UBO、渲染器等等)。
詳見:<2021SC@SDUSC> 開源游戲引擎 Overload 代碼模塊分析 之 OvGame(六)—— Core(三)Game
最后,頂層的 Application 類,引入了上述的 Context 類與 Game 類,是 OvGame 模塊的接口點;因此,該類的核心就是調用 Context 和 Game 等的內置變量與函數,實現運行應用。
詳見:<2021SC@SDUSC> 開源游戲引擎 Overload 代碼模塊分析 之 OvGame(七)—— Core(四)Application & Main.cpp
5、Main.cpp
核心是利用條件編譯命令,選擇函數名為 int 型 main() 或 INT(重定義前即 int)型 WinMain(),實現總體調控是否進入 Debug 模式;函數體功能則是運行應用程序與中止引擎程序。
詳見:<2021SC@SDUSC> 開源游戲引擎 Overload 代碼模塊分析 之 OvGame(七)—— Core(四)Application & Main.cpp
總結
通過回顧,我們可以發現 OvGame 的一個共同特點:層層引用,封裝功能,集合調度。由此可見,對于一個應用程序來說,功能之間的獨立性是非常重要的,這樣既能使代碼簡明、邏輯清晰,又能使代碼擁有很強的泛化能力,即可以之間用于其他項目,這是我們在以后的工作項目中可以考慮的編寫方法。
總結
以上是生活随笔為你收集整理的<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(八)—— 终篇总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea android 模块,Inte
- 下一篇: 微信小程序+TP5——token令牌生成