NGUI 渲染流程深入研究 (UIDrawCall UIGeometry UIPanel UIWidget)
上图是一个简要的 NGUI 的图形工作流程, UIG eometry被UIWidget实例化之后,通过 UIW idget的子类,也就是UISprit,UILabel等,在 OnFill() 函数里算出所需的Geometry缓存(顶点数, UV , Color ,法线,切线 )。PS:之所以要生成这些数据,是为了之后生成mesh来渲染 而 UIP anel,通过遍历自己子类下所有的 UIW idget组件(已经按深度排序),先创建一个 UID rawCall,然后把该Widget的material,texture,shader对象以及Geometry的缓存传给UIDrawCall,如此反复循环搜索该UIPanel下的每一个Widget,只要是material,texture,shader都和上一个 Widget 一样的 Widget,他们的缓存都传给同一个 UID rawCall,直到循环结束或者碰到一个材质球,贴图,shader对象任一不相同的Widget。当遇到这种 W idget,循环会再创建一个新的 UID rawCall,然后传递material,texture,shader,缓存,如此这般,直到循环完全结束。 每次有新的 UID rawCall产生,UIPanel就会调用上一个 UID rawCall的UpdateGeometry()函数,来创建渲染所需的对象