render-flow负责遍历节点,并根据节点的_renderFlag调用对用的flow,以更新坐标,更新uv等等。
1.初始化阶段
2. 传入节点调用
flow的第一个函数是init,参数是一个node, 获取node的renderFlag, 通过移位和&创建完整的flow。比如renderFlag是72,二进制表示形式为1001000,对应的flag为:WORLD_TRANSFORM|COLOR。getFlow通过传入的flag,给flow添加了两个函数,即color和worldTransform。这样就完成了一个链,init->color->worldTransform。
mainLoop->RenderFlow.render->RenderFlow.visitRootNode
传入参数为当前scene。
RenderFlow.flows是初始化创建的512个flow. 根据scene的_renderFlag找到对应的flow.
首先调用init,完成链的构建。接下来就根据链上的函数依次调用
WORLD_TRANSFORM: 世界坐标变换
CHILDREN:递归处理子节点
RENDER:调用Assembler的fillBuffers(非常重要!!!)
3. 最后一步,提交数据
_batcher.terminate->mesh-buffer.uploadData
uploadData中把数据填充到vertexsBuffer和indicesBuffer?
|