全文共5000+字,分为8个章节,由本人历时一周整理而来。由于篇幅问题,将本文分为8个章节分开发布。全文 (不) 详细描述了cocoscreator 引擎的2.40版本中,web平台的js部分引擎的渲染流程。请将文章配合源码一起食用!
由于我尚在学习引擎源码中,文章可能有不正确的部分,所以我会不断更新内容。如有错误或补充,请留言交流!
全部章节链接:
一 渲染流程中用到的核心类
1. Assembler : 处理渲染组件顶点数据的方法,为 RenderComponent 使用以处理不同的顶点数据数量以及不同的填充规则。
核心方法有:updateRenderData 用以准备顶点数据,fillBuffers 用以将准备好的顶点数据填充进VetexBuffer 和 IndiceBuffer 中。
子类有:2d图片使用的:SimpleSpriteAssembler 普通渲染使用,SlicedAssembler 九宫格填充,TiledAssembler 平铺模式,BarFilledAssembler 和 RadialFilledAssembler是横向和径向的填充模式。
2. RenderComponent: 所有直接渲染组件的基类,如cc.Sprite,cc.Label, cc.Graphics等。渲染组件的 _assembler 为其对应关联的 Assembler 来进行渲染数据的更新和提交。
3. RenderFlow : 渲染流,用以遍历场景下所有节点,根据每个节点的_renderFlag , 处理节点的位置,颜色,透明度,更新并渲染。
4. ModelBatcher : 用以管理渲染数据model,渲染批次合并,从而减少drawcall,提升性能。
5.ForwardRenderer : 持有的device是真正的使用gl函数将顶点数据,纹理等绘制到屏幕上。在 cc.render 下的 initWebGL 和 initCanvas 是根据不同设备情况下,创建ForwardRenderer的入口。
6. RenderData :Assembler 中持有的渲染数据,用以保存顶点数据,顶点索引数据。
7. Material : 材质,RenderComponent 中用于控制渲染组件的视觉效果,有Effect属性。
8. Effect : 可定义GLSL脚本。
相关链接
RenderFlow的性能优化:http://docs.cocos.com/creator/manual/zh/advanced-topics/render-flow.html#
自定义渲染合批之自定义顶点格式: https://forum.cocos.org/t/demo/95087
自定义RenderFlow,处理背包等场景下drawcall过多:https://forum.cocos.org/t/ui/80026
材质系统:https://docs.cocos.com/creator3d/manual/zh/material-system/overview.html