引擎由各種子系統構成。引擎啟動時需要考慮子系統啟動的順序問題。比如a依賴b的話那麼就應該先啟動b再啟動a,終止的時候應該先終止a再終止b。
一般用單例類來使用子系統(管理器) 例項用全域性變數來避免使用動態記憶體,如:
class rendermanager
~rendermanager()
};//單例乙個例項
static rendermanager grendermanager;
然而,c++全域性變數的建構,析構順序是沒有辦法直接控制的,所以這種方法行不通。
c++有乙個特性:函式內宣告的靜態變數並不會與main()之前建構,而是在第一次呼叫該函式時才建構。於是可採用如下的**
class
rendermanager
rendermanager()
~rendermanager()
};
下面是使用動態記憶體的變種
static rendermanager& get()
但是用這種方法無法控制析構的順序。並且get函式的開銷可能很大。我們要用乙個更加簡單並且有效的方法。
讓建構和析構函式完全不作任何事情。按所需的明確次序呼叫各個啟動和終止函式。如
class
rendermanager
//不做任何事情
~rendermanager() {} //不做任何事情
void startup()
void shutdown()
};class
physicsmanager ;
class
animationmanager ;
class
memorymanager ;
class
filesystemmanager ;
//.......
rendermanager grendermanager;
physicmanager gphysicsmanager;
animationmanager ganimationmanager;
texturemanager gtexturemanager;
videomanager gvideomanager;
memorymanager gmemorymanager;
filesystemmanager gfilesystemmanager;
//.......
int main(int argc,const
char* argv)
**優點:
①簡單 容易實現
②方法是明確的 看**就可以知道順序
③容易除錯和維護**
ogre中的一切物件都是由ogre::root單例控制。此單例含有指向其他ogre子系統的指標,並負責啟動和終止這些子系統。
所以啟動ogre,只需要new乙個ogre::root例項就可以了。
class _ogreexport root : public singleton
;root::root(const string
& pluginfilename,
const string
& configfilename,
const string
& logfilename):
mlogmanager(0),
mcurrentframe(0),
mframesmoothingtime(0.0f);
mnextmovableobjecttypeflag(1),
misinitiailised(false)
//動態庫管理員
mdynlibmanager =
new dynlibmanager();
marchivemanager =
new archivemanager();
//資源群管理員
mresourcegroupmanager =
new resourcegroupmanager();
//資源北京佇列
mresourcebackgroundqueue =
new resourcebackgroundqueue();
//等等...
}
勘探決策支援系統的技術點
最近想了想弄了幾年的勘探決策支援系統edss的內部技術,雖然名字起得有點大,但主要是提供勘探資料整合查詢和視覺化的,程式開發人員更換得不算多,功能不斷修修補補,現在靜下心來梳理一下技術點,應該還是挺有內容的,為了不洩漏企業秘密,只用對外宣傳材料上有的,技術點只寫些名字。1 soa的軟體框架 報獎時不...
第1章 決策支援系統的發展
資料倉儲是伴隨著資訊與決策支援系統 dss decision support system 到發展過程產生的。20世紀 60年代 打孔卡和紙帶儲存 20世紀 70年代 磁碟儲存或直接訪問儲存裝置 direct access storage device,dasd 之後出現了 dbms 資料庫管理系統...
遊戲引擎架構選摘之第五章 遊戲支援系統
每個遊戲都需要一些底層支援,以管理一些例行卻關鍵的任務。例如啟動及終止引擎 訪問 多個 檔案系統 訪問各種不同的資產型別 網格 紋理 動畫 音訊等 以及為遊戲團隊提供除錯工具。5.1 子系統的啟動和終止 遊戲引擎是複雜軟體,由多個互相合作的子系統結合而成。當引擎啟動時,必須一次配置及初始化每個子系統...