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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值