NGUI的总纲领
UIGeometry好比为煮菜准备食材
UIDrawCall好比是煮菜的工具(锅,炉子等)-
UIPanel就是大厨了决定着什么时候该煮菜-
UIWidget(UILabel,UISprite和UITexture)是这道菜怎么样的最终呈现
UIDrawCall
重要属性
mActiveList 保存正在使用的UIDrawcall列表
mInactiveList 保存暂时不使用的UIDrawcall,方便再次使用,避免再次创建,增加GC。
mMaterial; 当前UIDrawcall使用的材质球
mTexture; 当前材质球使用的纹理
mShader 动态渲染使用的shader
mTrans 缓存transform
mMesh 当前UIDrawcall的mesh
mFilter 当前UIdrawcall 的meshfilter
mRenderer 当前UIDrawcall的meshRender
mDynamicMat 当前UIDrawcall渲染的材质球
注意:mDynamicMat和mMaterial区别是,前者是实时渲染的材质,后者是保存渲染的数据
方法
CreateMaterial : 创建材质球,根据mMaterial提供的数据,动态生成一个mDynamicMat材质球来进行实时渲染。主要实现方法----替换shader
RebuildMaterial: 重建材质球,实现思路:首先把原有的mDynamicmat材质球销毁,然后新建一个mDynamicmat材质球。再对mDynamicmat这个材质球的渲染顺序和主要纹理就行修改。
UpdateMaterials:更新材质球,当材质球的属性发生了变换时,对材质球进行更新。
提示:这三者的关系:updateMaterials调用RebuildMaterial,然后再调用CreateMaterial。
UpdateGeometry:更新UIDrawcall的几何数据。然后把这些几何数据放到UIDrawcall的mesh中进行网格渲染。
OnWillRenderObject:mDynamicMat渲染进行设置
UIGeometry
说明:所有的UIWidget类都含有一个这个类,它是记录UIWidget的几何数据。
重要属性
Verts : 顶点
uvs : uv坐标
cols: 颜色值
mRtpVerts : 相对于panel的顶点数据
mRtpNormal : 相对panel的法线
方法
ApplyTransform: 对几何数据进行给定的矩阵转换
WriteToBuffers:导入对象的几何数据
UIPanel
重要属性
重要方法
FillAllDrawCalls: 重新绘制整个Panel,触发条件:
新建一个dc和删除一个dc
panel的初始
注意:这个很耗性能,所以建议不要
要点
每一个UIWidget都有一个UIGeometry,但是并不都有一个UIDrawCall,而是要通过Batch合并达到减少DrawCall的数量,UIDrawCall是由UIPanel生成的