NGUI的總綱領(lǐng)
UIGeometry好比為煮菜準(zhǔn)備食材
UIDrawCall好比是煮菜的工具(鍋,爐子等)-
UIPanel就是大廚了決定著什么時(shí)候該煮菜-
UIWidget(UILabel赏殃,UISprite和UITexture)是這道菜怎么樣的最終呈現(xiàn)
UIDrawCall
重要屬性
mActiveList 保存正在使用的UIDrawcall列表
mInactiveList 保存暫時(shí)不使用的UIDrawcall狸棍,方便再次使用霎褐,避免再次創(chuàng)建,增加GC。
mMaterial; 當(dāng)前UIDrawcall使用的材質(zhì)球
mTexture; 當(dāng)前材質(zhì)球使用的紋理
mShader 動(dòng)態(tài)渲染使用的shader
mTrans 緩存transform
mMesh 當(dāng)前UIDrawcall的mesh
mFilter 當(dāng)前UIdrawcall 的meshfilter
mRenderer 當(dāng)前UIDrawcall的meshRender
mDynamicMat 當(dāng)前UIDrawcall渲染的材質(zhì)球
注意:mDynamicMat和mMaterial區(qū)別是汉买,前者是實(shí)時(shí)渲染的材質(zhì)滋将,后者是保存渲染的數(shù)據(jù)
方法
CreateMaterial : 創(chuàng)建材質(zhì)球邻悬,根據(jù)mMaterial提供的數(shù)據(jù),動(dòng)態(tài)生成一個(gè)mDynamicMat材質(zhì)球來進(jìn)行實(shí)時(shí)渲染随闽。主要實(shí)現(xiàn)方法----替換shader
RebuildMaterial: 重建材質(zhì)球父丰,實(shí)現(xiàn)思路:首先把原有的mDynamicmat材質(zhì)球銷毀,然后新建一個(gè)mDynamicmat材質(zhì)球掘宪。再對mDynamicmat這個(gè)材質(zhì)球的渲染順序和主要紋理就行修改础米。
UpdateMaterials:更新材質(zhì)球,當(dāng)材質(zhì)球的屬性發(fā)生了變換時(shí)添诉,對材質(zhì)球進(jìn)行更新屁桑。
提示:這三者的關(guān)系:updateMaterials調(diào)用RebuildMaterial,然后再調(diào)用CreateMaterial栏赴。
UpdateGeometry:更新UIDrawcall的幾何數(shù)據(jù)蘑斧。然后把這些幾何數(shù)據(jù)放到UIDrawcall的mesh中進(jìn)行網(wǎng)格渲染。
OnWillRenderObject:mDynamicMat渲染進(jìn)行設(shè)置
UIGeometry
說明:所有的UIWidget類都含有一個(gè)這個(gè)類须眷,它是記錄UIWidget的幾何數(shù)據(jù)竖瘾。
重要屬性
Verts : 頂點(diǎn)
uvs : uv坐標(biāo)
cols: 顏色值
mRtpVerts : 相對于panel的頂點(diǎn)數(shù)據(jù)
mRtpNormal : 相對panel的法線
方法
ApplyTransform: 對幾何數(shù)據(jù)進(jìn)行給定的矩陣轉(zhuǎn)換
WriteToBuffers:導(dǎo)入對象的幾何數(shù)據(jù)
UIPanel
重要屬性
重要方法
FillAllDrawCalls: 重新繪制整個(gè)Panel,觸發(fā)條件:
新建一個(gè)dc和刪除一個(gè)dc
panel的初始
注意:這個(gè)很耗性能花颗,所以建議不要
要點(diǎn)
每一個(gè)UIWidget都有一個(gè)UIGeometry捕传,但是并不都有一個(gè)UIDrawCall,而是要通過Batch合并達(dá)到減少DrawCall的數(shù)量扩劝,UIDrawCall是由UIPanel生成的