之前臨時看了下mygui,發(fā)一下跟蹤的信息,以備參考:
一。 創(chuàng)建每個widget, 用所得皮膚進(jìn)行初始化,
一個皮膚可以由子皮膚以及子控件組合成。
1. 創(chuàng)建皮膚對應(yīng)的一個貼圖并創(chuàng)建皮膚下所有子皮膚(存入mSubSkinChildo數(shù)組中, 它們都是使用此相同貼圖),并加到mSubSkinChild以及mDrawItems中。
2. 然后設(shè)置該皮膚對應(yīng)的屬性值。
3. 創(chuàng)建該皮膚所有子控件(存入widget中的mWidgetChildSkin數(shù)組中)
二。將所創(chuàng)建的控件加入到對應(yīng)的layernode中:
LayerManager::getInstance().attachToLayerNode(_layer, widget);
其中會遍歷widget中所有mDrawItems(子皮膚),加到對應(yīng)的layernode中,
當(dāng)前子皮膚(SubSkin)使用該widget中的mTexture來創(chuàng)建mRenderItem(在layernode中有映射表按textrue來歸類, 其中文字放入mFirstRenderItems,其它放入mSecondRenderItems)
而mRenderItem中也有一個mDrawItems數(shù)組,用來存入SubSkin的. 同時mRenderItem中有mVertexBuffer,當(dāng)渲染時,會遍歷所有mDrawItems,將它們收集到mVertexBuffer中進(jìn)行批次渲染.
三。渲染:
遍歷所有mLayerNodes進(jìn)行渲染
1. 遍歷mFirstRenderItems和mSecondRenderItems中所有RenderItem進(jìn)行渲染
在RenderItem中遍歷mDrawItems,調(diào)用其doRender()方法,將頂點渲染到mVertexBuffer中.
2. 渲染mChildItems中所有
四。 關(guān)于文字的渲染:
simpletext是一個renderitem
simpletext從edittext中派生
edittext::updateRawData會使用mTextView生成貼圖uv等數(shù)據(jù)
每個RenderItem提供一個vertext buf,供其中的數(shù)據(jù)進(jìn)行填充批次渲染
文字的渲染由于是一次讀入的(老外就是不考慮中文),如果中文修改范圍直接用的話則加載時必定卡。。。
而且中文字多,一般不好全部一次存入貼圖中,只能使用貼圖緩存方式處理。
posted on 2011-06-24 15:47
flipcode 閱讀(1077)
評論(0) 編輯 收藏 引用