从上一章cocos启动流程中知道,cocos的渲染队列中,总共有TRIANGLES_COMMAND, GROUP _COMMAND等七种,其中GROUP_COMMAND是命令集合,QUAD_COMMAND是TRIANGLES_COMMAND的扩展类,真正的渲染命令只有5种:CUSTOM_COMMAND用于自定义绘制,BATCH_COMMAND批次渲染图集,MESH_COMMAND网格渲染,主要用于渲染3D模型(Sprite3D),PRIMITIVE_ COMMAND用于点线等的绘制,TRIANGLES_COMMAND三角形绘制,主要绘制按钮,图片等矩形控件(sprite)。这次主要记录TRIANGLES_COMMAND的绘制。
游戏渲染消耗大的一个重要原因就是drawCall次数太多,drawCall用OPENGL描述就是调用绘制函数(drawElement等)的次数。cocos对TrianglesCommand的命令进行了优化,对使用同一材质的绘制命令中的顶点和索引进行合并,同一材质的命令进行批次渲染,我们项目的3D批次渲染也是这种思想。以sprite的绘制为例,每次渲染遍历场景时调用调用sprite的draw函数(流程见cocos启动流程),生成TrianglesCommand渲染命令,加入到Renderer的渲染队列:
TrianglesCommand _trianglesCommand;
void Sprite::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
{
_trianglesCommand.init(_globalZOrder,
_texture