Torque學習筆記一之生死因果

從入口函數WinWindow.cpp中定義了winMain函數,使得我們的Torque之旅正式開始,當程序執行到run函數的時候進入到TorqueMain函數,顧名思義就是Torque的主函數了。其中由初始化函數、主循環函數和卸載資源函數三個組成部分。

     初始化函數StandardMainLoop::init()部分源代碼如下
{
 ResManager::create();
 TelnetConsole::create();
}
這個初始化工作有很多內容,我只描述其中兩個部分的功能,其一ResManager::Create函數,這個函數中創建了所有跟文件相關的資源文件,例如圖片文件、聲音文件、模型文件、字體文件等。其二 、諸如TelnetConsole::Create
在這個函數中主要有一個全局的指針指向了TelnetConsole對象並用Process::notify(TelConsole,&TelnetConsole::process, PROCESS_FIRST_ORDER);將TelnetConsole的process函數註冊到Process中,這句話我解釋一下,Process就是處理和過程的意思,也就是這個函數將是主循環的一個過程,這個註冊的原理我將在以後描述。
   回到開始初始化函數完成後還有一個非常重要的過程,就是腳本解析功能,Torque的腳本解析機制將會在這個函數下執行StandardMainLoop::handleCommandLine(argc, argv)。這個函數以根目錄下的main.cs文件爲入口函數開始解析執行的,例子程序的腳本都有創建窗口這個函數,所以窗口在這個時候就產生了。
   做完腳本解析後就要進入程序的主循環函數了while(StandardMainLoop::doMainLoop())。在doMainLoop中最主要的函數就是Process::processEvents,還記得初始化的時候那個TelnetConsole的註冊過程吧,由於初始化的時候向Process註冊了一個過程,所以在主循環的時候就會不停的按這個過程來執行,然而奇妙的Torque程序就從這裏放飛!
   整個過程一共包括以下八個過程
(1)TelnetConsole::Process();
  (2)  TelnetDebugger::process();
  (3)  Net::process();
  (4)  Input::process();
  (5) Win32WindowManager::process();
  (6) Timemanager::_updateTime();
  (7)GuiCanvas::paint();
  (8)WinConsole::process();
       前三個是跟網絡通訊相關的過程,第四個跟輸入設備相關,第五個就是監聽window的消息相關,第六個是與時間相關的處理的,處理的是跟3D相關服務器端的運算,第七是所有渲染相關的,第八個是跟命令行相關的,調用全局函數enableConsole(1)就可以啓動一個控制檯,可以執行命令和監控運行的Torque程序。
       這裏面最重要的就是5-7過程,第5個封裝的window的消息響應機制,將windows消息的響應分層的傳遞給Gui控件,其中GuiCanvas類實現的消息傳遞和圖像渲染邏輯,這個以後做更詳細的描述。
      第6個就是跟3D相關的運算,其中包含碰撞檢測,場景管理,動畫播放等等。第7個就是圖像渲染,若是渲染2D的圖像,就在Gui裏面的onRender函數直接調用GFX的渲染函數就實現渲染,如果是3D圖形,那麼渲染複雜一些,需要走完一個渲染流程,簡單說就是在Gui控件裏面的onRender函數只是將需要渲染的物體加入渲染管理器的鏈表中並設置其渲染狀態,待所有渲染物體設置完成之後然後一次性調用渲染管理器的渲染函數將3D的物體渲染到顯卡上。這個渲染管理器以後在描述,這裏面涉及更多跟3D表現相關的知識。
      回到主函數,下面就是釋放資源函數了,其實比較簡單就是將初始化函數中說有創建的資源都在這裏進行釋放,這裏也不展開描述了。
      這裏只是將Torque大體的流程過了一次,主要圍繞着這個八個過程來說,初學者最難理解的就是這個八個過程是在哪裏定義的,這裏我只是簡單的說了一下是這個8個過程是如何註冊到process裏面去的,Process類裏面的有個對象用於存放函數指針,註冊的本質是其實就是將整個8個函數的指針存放在一個鏈表裏面,其Torque的主要做法用了模板機制來實現,還是比較複雜,相當實現了Delegate機制,有人就會問了爲什麼這麼麻煩的來註冊函數,爲什麼不直接在主循環函數裏調用,其實就是爲了實現解耦,就是將調用和實現解耦,當然這樣做的好處就是便於管理很擴展啦。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章