Cocos2dx 绘制流程总结
来源:互联网 发布:域名未实名可以解析吗 编辑:程序博客网 时间:2024/06/05 09:33
Cocos2dx 绘制流程总结
1. 创建CCDirector.
代码:CCDirector *pDirector = CCDirector::sharedDirector();
2. 设置openglView.
代码:
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
重要内容:setOpenglGLView->setGLDefaultValues,其中设置了视口大小,颜色混合,深度检测,清屏颜色,摄像机透视类型等。
3.主循环mainloop->drawScene
visit方法访问了所有子节点的draw方法。
4.单个节点绘制
以CCSprite为例:
void CCSprite::draw(void)
{
CC_PROFILER_START_CATEGORY(kCCProfilerCategorySprite,"CCSprite - draw");
CCAssert(!m_pobBatchNode,"If CCSprite is being rendered byCCSpriteBatchNode, CCSprite#draw SHOULD NOT be called");
CC_NODE_DRAW_SETUP();
ccGLBlendFunc( m_sBlendFunc.src, m_sBlendFunc.dst );
if (m_pobTexture !=NULL)
{
ccGLBindTexture2D( m_pobTexture->getName() );
}
else
{
ccGLBindTexture2D(0);
}
//
// Attributes
//
ccGLEnableVertexAttribs( kCCVertexAttribFlag_PosColorTex );
#definekQuadSize sizeof(m_sQuad.bl)
long offset= (long)&m_sQuad;
// vertex
int diff = offsetof( ccV3F_C4B_T2F, vertices);
glVertexAttribPointer(kCCVertexAttrib_Position,3,GL_FLOAT,GL_FALSE,kQuadSize, (void*)(offset + diff));
// texCoods
diff = offsetof( ccV3F_C4B_T2F, texCoords);
glVertexAttribPointer(kCCVertexAttrib_TexCoords,2,GL_FLOAT,GL_FALSE,kQuadSize, (void*)(offset+ diff));
// color
diff = offsetof( ccV3F_C4B_T2F, colors);
glVertexAttribPointer(kCCVertexAttrib_Color,4,GL_UNSIGNED_BYTE,GL_TRUE,kQuadSize, (void*)(offset+ diff));
glDrawArrays(GL_TRIANGLE_STRIP,0,4);
CHECK_GL_ERROR_DEBUG();
#ifCC_SPRITE_DEBUG_DRAW == 1
// draw bounding box
CCPoint vertices[4]={
ccp(m_sQuad.tl.vertices.x,m_sQuad.tl.vertices.y),
ccp(m_sQuad.bl.vertices.x,m_sQuad.bl.vertices.y),
ccp(m_sQuad.br.vertices.x,m_sQuad.br.vertices.y),
ccp(m_sQuad.tr.vertices.x,m_sQuad.tr.vertices.y),
};
ccDrawPoly(vertices, 4, true);
#elifCC_SPRITE_DEBUG_DRAW == 2
// draw texture box
CCSize s = this->getTextureRect().size;
CCPoint offsetPix = this->getOffsetPosition();
CCPoint vertices[4] = {
ccp(offsetPix.x,offsetPix.y),ccp(offsetPix.x+s.width,offsetPix.y),
ccp(offsetPix.x+s.width,offsetPix.y+s.height),ccp(offsetPix.x,offsetPix.y+s.height)
};
ccDrawPoly(vertices, 4, true);
#endif// CC_SPRITE_DEBUG_DRAW
CC_INCREMENT_GL_DRAWS(1);
CC_PROFILER_STOP_CATEGORY(kCCProfilerCategorySprite,"CCSprite - draw");
}
- Cocos2dx 绘制流程总结
- View绘制流程总结
- Android View 绘制流程总结
- cocos2dx地图绘制
- cocos2dx-draw绘制
- cocos2dx 3.0 绘制图形
- Cocos2dx绘制贴图
- cocos2dx绘制实心圆
- cocos2dx绘制时钟
- cocos2dx总结
- cocos2dx---总结
- cocos2dx游戏循环流程
- cocos2dx渲染流程
- Cocos2Dx之渲染流程
- cocos2dx渲染流程
- Cocos2Dx之渲染流程
- cocos2dx 执行流程分析
- Cocos2Dx之渲染流程
- 熬夜后眼睛胀痛该怎么办才好?
- 如何养成良好的 C++ 编程习惯(一)—— 内存管理
- 黑马程序员-static关键字和单例模式
- C语言简单程序判定大小端
- 对APK进行重签名
- Cocos2dx 绘制流程总结
- 【jmx学习】2、jmx之Html Adaptor
- 三种排序方法的比较
- android4.1.2获得屏幕分辨率的方法,其它神马都是浮云!
- Android Toast 简单封装
- Windows界面编程第九篇 位图显示特效 交错效果
- Linux下MySql插入汉字报错解决(/etc/my.cnf不存在)
- Windows界面编程第十篇 位图显示特效 百叶窗效果
- 淘宝技术发展4(Java时代:脱胎换骨)