NGUI 深入解析

2015-11-16  本文已影响0人  hardac

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生成的

上一篇下一篇

猜你喜欢

热点阅读