位置: 编程技术 - 正文

cocos2D-X源码分析之从cocos2D-X学习OpenGL(1)----cocos2D-X渲染结构(cocos2d原理)

编辑:rootadmin

推荐整理分享cocos2D-X源码分析之从cocos2D-X学习OpenGL(1)----cocos2D-X渲染结构(cocos2d原理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos2dx源码分析,cocos2d游戏源码,cocos2dx源码分析,cocos2d游戏源码,cocos2dx源码分析,cocos2dx游戏源码,cocos 源码,cocos2dx源码分析,内容如对您有帮助,希望把文章链接给更多的朋友!

个人原创,欢迎转载,转载请注明原文地址 从本篇文章开始,将分析cocos2D-X 3.0源代码,第一部分是从cocos2D-X学习OpenGL,也就是分析cocos2D-X 3.0的渲染代码,本篇首先介绍cocos2D-X 3.0的渲染结构,使用的是3.0正式版。

分析的起点是mainLoop函数,这是在主线程里面会调用的循环,其中drawScene函数进行绘制。那么就进一步来看drawScene函数。

其中和绘制相关的是visit的调用和render的调用,其中visit函数会调用节点的draw函数,在3.0之前的版本中draw函数就会直接调用绘制代码,3.0版本是在draw函数中将绘制命令存入到renderer中,然后renderer函数去进行真正的绘制,首先来看sprite的draw函数。

这里面用了两种不同的绘制命令quadCommand初始化后就可以加入到绘制命令中,customDebugDrawCommand传入了一个回调函数,具体的命令种类会在后面介绍。其中自定义的customDebugDrawCommand命令在初始化的时候只传入了全局z轴坐标,因为它的绘制函数全部都在传入的回调函数里面,_quadCommand则需要传入全局z轴坐标,贴图名称,shader,混合,坐标点集合,坐标点集个数,变换。

Render类中的render函数进行真正的绘制,首先排序,再进行绘制,从列表中的第一个组开始绘制。在visitRenderQueue函数中可以看到五种不同类型的绘制命令类型,分别对应五个类,这五个类都继承自RenderCommand。

QUAD_COMMAND:QuadCommand类绘制精灵等。

所有绘制图片的命令都会调用到这里,处理这个类型命令的代码就是绘制贴图的openGL代码,下一篇文章会详细介绍这部分代码。

CUSTOM_COMMAND:CustomCommand类自定义绘制,自己定义绘制函数,在调用绘制时只需调用已经传进来的回调函数就可以,裁剪节点,绘制图形节点都采用这个绘制,把绘制函数定义在自己的类里。

这种类型的绘制命令不会在处理命令的时候调用任何一句openGL代码,而是调用你写好并设置给func的绘制函数,后续文章会介绍引擎中的所有自定义绘制,并自己实现一个自定义的绘制。

BATCH_COMMAND:BatchCommand类批处理绘制,批处理精灵和粒子

其实它类似于自定义绘制,也不会再render函数中出现任何一句openGL函数,它调用一个固定的函数,这个函数会在下一篇文章中介绍。

cocos2D-X源码分析之从cocos2D-X学习OpenGL(1)----cocos2D-X渲染结构(cocos2d原理)

GROUP_COMMAND:GroupCommand类绘制组,一个节点包括两个以上绘制命令的时候,把这个绘制命令存储到另外一个_renderGroups中的元素中,并把这个元素的指针作为一个节点存储到_renderGroups[0]中。

整个GROUP_COMMAND的原理需要从addCommand讲起。

addCommand有“真假”两个,几乎所有添加渲染命令的地方,调用的都是第一个“假” addCommand,它实际上不是真正的把命令添加到_renderGroups中,它是获得需要把命令加入到_renderGroups位置中的索引,这个索引是从_commandGroupStack获得的,_commandGroupStack是个栈,当我们创建一个GROUP_COMMAND时,需要调用pushGroup函数,它是把当前这个命令在_renderGroups的索引位置压到栈顶,当addCommand时,调用top,获得这个位置

_groupCommand.init(_globalZOrder);

renderer->addCommand(&_groupCommand);

renderer->pushGroup(_groupCommand.getRenderQueueID());

GROUP_COMMAND一般用于绘制的节点有一个以上的绘制命令,把这些命令组织在一起,无需排定它们之间的顺序,他们作为一个整体被调用,所以一定要记住,栈是push,pop对应的,关于这个节点的所有的绘制命令被添加完成后,请调用pop,将这个值从栈顶弹出,否则后面的命令也会被添加到这里。

接下来就可以解释为什么调用的起始只需调用

visitRenderQueue(_renderGroups[0]);,为什么只是0,其他的呢?

它们会在处理GROUP_COMMAND被调用

如有错误,欢迎指出

下一篇介绍贴图和批处理的openGL代码部分

同时推荐子龙山人的openGL相关博客:

cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND 个人原创,欢迎转载,转载请注明原文地址

cocos2dx3.2 创建界面菜单的简单使用 boolStartLayer::init(){if(!Layer::init()){returnfalse;}autovisibleSize=Director::getInstance()-getVisibleSize();autoorign=Director::getInstance()-getVisibleOrigin();autobg=Sprite::create(LittleGirl.jp

Cocos2d-x 3.2 打包Android平台APK! Cocos2d-x3.2学习笔记(四)学习打包Android平台APK!从cocos2dx3.2项目打包成apk安卓应用文件,搭建安卓环境的步骤有点繁琐,但搭建一次之后,以后就会非常

标签: cocos2d原理

本文链接地址:https://www.jiuchutong.com/biancheng/369027.html 转载请保留说明!

上一篇:cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND(cocos creator源码)

下一篇:cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND(cocos 源码)

  • 房产租金收入免不免房产税?
  • 个人所得税 补觉
  • 牵引车和挂车都要购买交强险吗
  • 租赁房屋怎么写合同
  • 税务申报有什么技巧
  • 事业单位补发以后的工资
  • 外贸公司有国企吗
  • 企业合并相关舞弊风险有哪些
  • 出口抵减内销产品应纳税额是借方还是贷方
  • 生产企业外购商品经过加工
  • 公司购买电脑费用怎么报销
  • 出口退税销项税额计算公式
  • 注册资金印花税是资金账簿吗
  • 保障性住房享有怎么取消儿子的名字呀
  • 外地项目预缴个人所得税
  • 物业公司安装监控为了什么
  • 企业在外地的房产怎么办
  • 航天金税服务费280怎么缴费
  • 总账科目和明细科目余额分析填列
  • 小规模纳税人月销售额不超过10万免征
  • 补缴社保滞纳金怎么做账
  • windows10开机很卡
  • 设置按住键盘重启怎么弄
  • 飞机电子普通发票6%税率可以抵扣吗
  • s24evmon.exe - s24evmon是什么进程 有什么用
  • 在承租的土地上建房
  • 公司为员工发放生日福利
  • jinjia.exe进程
  • unc方式
  • PHP:imagepsfreefont()的用法_GD库图像处理函数
  • 外商投资合伙企业有哪些
  • oss对象储存的副本储存原则
  • 跨年度退货
  • 作废的专票能认证过去吗
  • 宋大叔教音乐第三单元进阶版
  • vue系列教程
  • 其他综合收益属于什么类
  • 低值易耗品需要计提吗
  • Yii 连接、修改 MySQL 数据库及phpunit 测试连接
  • 财务费用有发票吗
  • 成本费用利润率是什么指标
  • 其他收益在利润表中的位置
  • 企业所得税多预缴了怎么办
  • 报销差旅费的进项税额
  • 小规模纳税人需要每月清卡吗
  • 托收承付和委托收款区别
  • 营改增后土地出让增值税
  • 自来水厂被收购,员工怎么办
  • 维修材料分类
  • 员工出差报销的餐费怎么下账
  • 房地产企业销售现房是否预缴增值税
  • 企业用实物资产出资 增值税
  • 外汇汇兑损益财务处理
  • 小企业购进商品怎么入账
  • 财税公司工作内容
  • mysql从一张表复制数据到另一张表
  • win8系统无法开机如何备份数据
  • 经典璧纸
  • win10 ie无法使用
  • win10预览版
  • 安装完xp系统直接黑屏怎么办
  • win7网络连接不见了
  • windows 8 开发者预览版
  • linux更新配置
  • win10系统打不开网页怎么办
  • jQuery中的ajax async同步和异步详解
  • Cocos2dx3.2 Crazy Tetris 基本设置及主菜单页面(菜单、按钮)
  • 怎么检测端口通不通
  • 电脑qq清理
  • opengl learn
  • radio js取值
  • jquery定位
  • 详解Javascript事件驱动编程
  • 如何使用jquery实现点击按钮弹出一个对话框
  • 北京市国家税务局网站官网
  • 出口退税中的留抵税额
  • 不含税价是除以1.13还是乘以0.87
  • 高速公路过路费电子发票在哪里开
  • 财税〔2009〕61号
  • 小规模纳税人租赁费税率
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设