1、cocos主线程以及Auto-batching
AppDelegate app;//封装用于智能分化,完成初始化,载入资源、构造场景、生成精灵
Application::getInstance()->run();//启动主线程
director->mainLoop();//分为场景渲染,和清理缓存池
glview->pollEvents();
drawScene:
1)优先处理输入事件(空实现,留接口)
2)默认定时器(负优先级,0,正优先级)。自定义计时器
3)visit主渲染树(autobatcch)是使用group
4)visit通知窗口
5)渲染,切换缓存区
visit:中序遍历二叉树,添加RenderCommand。
遍历结束后执行Render():
排序RenderCommand为三组:负、0、正;
RenderCommand中为QUAD_COMMAND的将会进行autoBatch处理:
_batchedQuadCommands缓存池不断添加单个QuadCommand,
当前的绘制命令绘制quad单元数加上现存的绘制单元数超过缓存池容量,则执行现存的绘制操作,并清理缓存池,之后添加命令至缓冲池中。
其余绘制类型如custom、batchNode则是直接执行,不执行autoBatch。
而GroupCommand类型是又是一组绘制队列,将递归地执行上诉过程。
1、shader绘制灰度纹理
在helloworld中增加变量:
cocos2d::CustomCommand m_customCommand;
void onDraw(const cocos2d::Mat4 &transform, uint32_t flags);
cocos2d::Sprite* m_pSprite;
cocos2d::V3F_C4B_T2F_Quad m_sQuad;
//cpp中代码
#include "HelloWorldScene.h"
USING_NS_CC;
static Texture2D * texture2d;
//--------------------------------------------------------
static const GLchar* s_szColorSpriteVSH =
" \n\
attribute vec4 a_position; \n\
attribute vec2 a_texCoord; \n\
attribute vec4 a_color; \n\
\n\
#ifdef GL_ES \n\
varying lowp vec4 v_fragmentColor; \n\
varying mediump vec2 v_texCoord; \n\
#else \n\
varying vec4 v_fragmentColor; \n\
varying vec2 v_texCoord; \n\
#endif