我所理解的cocos2dx - 帧缓冲

GroupCommand

分组绘制在cocos2dx上主要有2个用途,一个是RenderTexture,它是一个node的子类,用于把场景绘制到纹理而不是屏幕上,也可以把缓冲区上的颜色,深度和模版值保存到Renderbuffer上,供多个帧缓冲之间共享。

另一个用途就是实现裁剪,例如ClippingNode,它能在绘制命令上加特殊绘制状态,如模版测试。

GroupCommand流程

Begin:开始组绘制,会先在绘制栈上新开一个绘制组,把id放入绘制组的id,Render会从id栈取顶的id来获取绘制组,这样绘制命令就会加入到新的绘制组里,这在GroupCommand的init里实现。因为ui树和绘制分开了,所以begin的时机不是ui遍历到该元素的时机,而是Renderer在开始绘制GroupCommand的时机。

visit:加入绘制命令到该组

end:该组所有需要绘制的命令都遍历后,从Render上移除id和该组对应的RenderQueue,还要还原一些状态。

GroupCommand限制

绘制机制会导致某些情况绘制异常,例如组内元素用了globalZ来设定层级,显示到最顶端,但会被ClippingNode的裁剪给影响。而且GroupCommand只影响RenderCommand绘制,所以要通过RenderComand来进行gl操作才行。

来源:博客园 - usp10

--电子创新网--
粤ICP备12070055号