07-渲染流程-4-Sprite渲染-渲染命令分析

来源:互联网 发布:京东联盟网站源码 编辑:程序博客网 时间:2024/06/05 09:49

Image

如果在可视范围内,则需要执行render的addCommand命令

首先我们需要搞清楚两个对象   _quadCommand 和 renderer

QuadCommand

Image(1)

Sprite使用的QuadCommand进行渲染,所以要了解Sprite是如何被渲染出来的,就要深入看QuadCommand的代码了。

Renderer

renderer->addCommand(&_quadCommand);

addCommand发生了什么呢?

在Renderer内部有一个

std::vector<RenderQueue> _renderGroups;

addCommand 其实就是在栈顶的RenderQueue添加RenderCommand

我们再来看看RenderQueue

Image(2)

维护了RenderCommand,在我们这个Demo中,只需要关注 _queue0 即可

渲染的时机

我们再来看看 Director::mainLoop 吧,如果合适,就会做两件事情

1.drawScene

2.内存池释放

Image(3)

所以渲染的关键地方在于 drawScene

Image(4)

显然,渲染的时机现在我们可以粗略的分为两部分:

1.遍历Node树,收集渲染命令,渲染命令保存在了_renderer对象的当前栈顶的 RendQueue中

Node树的根节点永远是当前Scene对象

2.执行 _renderer->render()

Image(5)

进行排序后,然后就具体渲染,基本可以分为两步:

1.遍历保存的RenderCommand

2.flush 执行批次渲染命令

在HelloWorld中:

1.遍历保存的RenderCommand,找到了渲染的QuadCommand命令,并保存在了

std::vector<QuadCommand*> _batchedQuadCommands;

2.flush

调用了  void Renderer::drawBatchedQuads()

然后从QuadCommand中获取渲染的数据,调用对应的OpenGL接口进行绘制。

所以接下来我们需要重点分析一下

QuadCommand 和 对应的 渲染接口

0 0