cegui 2
資源管理入門
讀了cegui渲染入門這一章,你已經知道,要想讓cegui跑起來,至少對cegui進行最基礎的
初始化,並呼叫system ::rendergui方法,這看起來不錯。可是,你仍然畫不出任何東西。
為了達成,下一步是設定資源管理組(resource provider groups),我們將用它們裝載一些檔案供cegui在渲染的時候使用。
resourceprovide 是什麼?
cegui使用了乙個工具物件,我們叫它「resourceprovide」。這個物件提供了一組介面負責cegui與其他的檔案裝載系統通訊。
例如: ogre 和irrlicht 都有他們自己的資源管理/檔案裝載子系統,通過實現特定的resourceprovide 物件,cegui
的渲染模組就和那些子系統無縫的組合起來。那樣cegui的資料檔案就可以通過那些子系統裝載了。但是,更底層的庫
(direct3d opengl) 沒有那樣的資源管理系統。所以cegui 為他們提供了預設的資源管理系統
(default resource provider)。
default resource provider 相關說明
cegui::defaultresourceprovider --------cegui 的預設的資源管理系統,是為那些還沒有資源管理的庫
提供基礎幫助的系統。 他不僅提供了cegui裝載檔案 資料時所需要的函式,而且對資源組(resource groups)
也提供了初步的支援。 這裡的「資源組」其實只是乙個標籤,它代表系統的某個資料夾路徑。這使得我們可以將資料夾
中的檔案按邏輯型別分組,然後可以通過乙個人簡單的標籤而不是硬編碼的路徑去指定它,也就是說:當資料檔案的
路徑有改動的時候,只需要更細資源組的路徑而不必更改**和xml檔案中的路徑資訊。
指定資源組和路徑
defaultresourceprovider 允許你定義任意數目的資源組,並為每個資源組指定乙個路徑。也就是說,你可以
建立乙個資源組,比如 「imagesets」,並為它指定乙個路徑,假設是"./game/datafile/gui/imagesets/".
然後,你通過imagesetmanager裝載imageset的時候,就可以指定"imagesets"為他將要使用的資源組,
這樣系統就會在預定義的路徑中尋找資源。目前,每個資源組只可以賦予乙個路徑。 個
例子說明
以前,在沒有使用資源組的時候,你may be
imageset *set = imagesetmanager::getsingleton().createimageset("./game/datafile/gui/imagesets/windowslook.imageset");
使用了資源組以後,在初始化階段,你可以使用預設的資源管理器像這樣建立資源組
defaultresourceprovider *rp = cegui::system::getsingleton().getresourecprovider();
rp->setresourcrgroupdirectory("imagesets","("./game/datafile/gui/imagesets/windowslook.imageset");
imageset *set = imagesetmanager::getsingleton().createimageset("windowslook.imageset","imagesets")
預設資源組
系統定義的任何代表可以可裝載資源的資源類,都有獲取和設定預設資源組的靜態函式。
當需要載入資料檔案的時候,他就用那個預設資源組。比如:對於imageset類,預設的資源組應該指向
乙個儲存imageset xml 檔案和材質檔案的資料夾。
對於每個資源類,他們獲取 設定資源組的靜態函式的名字都是一樣的(xerces 是個例外)
const string& getdefaultresourcegroup();
void setdefaultresourcegroup(cosnt string& groupname);
如果是資源類的乙個列表,後面是他們各自管理的資源型別
cegui::imageset ------- imageset xml and texture image files
cegui::font ---------- font xml and ttf font files.
cegui::scheme -------scheme xml files
cegui::windowmanager --------- window layout xml files
cegui::widgetlookmanager ---------- looknfeel xml files
cegui::scriptmodule ---------script files in whichever scripted langauge
上面提到過,xerces是個例外,它是「基於xerces-c的xml直譯器(xerces-c based xml parser)」。對此,有乙個特殊的資源組設定檔案,它指明schema檔案在**(它們是用來檢查xml的.xsd檔案)。對於這個特殊情況,它的靜態成員如下:
const
string& xercesparser::getschemadefaultresourcegroup();
void
xercesparser::setschemadefaultresourcegroup(
const
string& groupname);
需要注意的最後一點是:資源管理類也有乙個預設的資源組。當乙個資源類沒有顯示的指定資源組的時候,
系統就會使用它。當你把所有的資料檔案都放到乙個資料夾的時候,這點就很方便了。
乙個完整的例子:配置
defaultresourceprovider
// 為defaultresourceprovider設定所需的路徑
cegui::defaultresourceprovider* rp = static_cast
(cegui::system::getsingleton().getresourceprovider());
rp->setresourcegroupdirectory("schemes"
, "../datafiles/schemes/"
);
rp->setresourcegroupdirectory("imagesets"
,
"../datafiles/imagesets/"
);
rp->setresourcegroupdirectory("fonts"
, "../datafiles/fonts/"
);
rp->setresourcegroupdirectory("layouts"
, "../datafiles/layouts/"
);
rp->setresourcegroupdirectory("looknfeels"
,
"../datafiles/looknfeel/"
);
rp->setresourcegroupdirectory("lua_scripts"
,
"../datafiles/lua_scripts/"
);
// 這步僅當你使用xerces作為xml解析器的時候才需要
rp->setresourcegroupdirectory("schemas"
, "../../xmlrefschema/"
);
完成這步以後,我們就把資源組和它們的路徑都設定好了。最後,為了讓系統使用新設定的路徑,我們來設定預設資源組:
// 設定預設資源組
cegui::imageset::setdefaultresourcegroup("imagesets"
);
cegui::font::setdefaultresourcegroup("fonts"
);
cegui::scheme::setdefaultresourcegroup("schemes"
);
cegui::widgetlookmanager::setdefaultresourcegroup("looknfeels"
);
cegui::windowmanager::setdefaultresourcegroup("layouts"
);
cegui::scriptmodule::setdefaultresourcegroup("lua_scripts"
);
// 僅當你用xerces做xml解析器,並為它定義了乙個資源組的時候使用
cegui::xercesparser::setschemadefaultresourcegroup("schemas"
);
總結:目前,你對defaultresourceprovider 這個類有了大致的了解了。
知道了怎麼建立資源
組並為他們制定路徑。 還學會為cegui的使用的每個資源型別設定預設資源組。
2 資源管理技術
在相互競爭的應用程式之間有序地控制軟硬體資源的分配 使用和 使資源能夠在多個程式之間共享。讓眾多程序共享物理資源 分割實際存在的物理資源 物理資源復用共享的基本方法 把乙個物理上的實體變為多個邏輯上的對應物 或把多個物理資源變成單個邏輯上的對應物 使用者感受到的,是假想的虛擬同類資源 為什麼記憶體4...
部門管理入門 2 評審制度
執行說明 1 有效的評審是什麼?我經常在思考這個問題。正文 軟體部評審制度 變更記錄序號 修改條款 修改內容 修改人 日期 備 注 注 對該檔案內容增加 刪除或修改均需填寫此變更記錄,詳細記載變更資訊,以保證其可追溯性。規範化的流程,為專案實施過程的監控提供比較全面的思考 書寫模板,指導專案經理通過...
使用yii2的appasset資源管理包
yii2.0對於css js 管理,使用assetbundle資源包類。namespace frontend assets useyii web assetbundle class extends assetbundle 定義按需載入css方法,注意載入順序在最後 public static fun...