前几天公司游戏更新到cocos3.0,在国内高端大气的百元android机都能跑50帧,但就是在(小米, MX2,三星大部分手机)上帧率非常低,就那么10帧率左右,为了解决这个问题,adnroid java底层都翻篇无解,最后写了个profile,,发现cocos的渲染层有严重BUG,,我可以吐槽下吗,,coco2dx 渲染层都是些实习生写的哇,,太水了,,回到正题,3.0版本为了做效率优化,在CCRender预先分配了顶点buffe和索引buff,,问题就在这了,,分配的buff 巨型无比(static const int VBO_SIZE = 65536 / 6;), 刚好在做渲染时候又调用了glBufferSubData,而且是有多少渲染批次就调用多少次,,造成在部分手机帧率极低; 在修改static const int VBO_SIZE = 1024; 后来bug fixed,希望其他的coder遇到这种情况少走弯路;
请问一下,3.0的哪个版本?
能否提供更详细的信息,因为发现代码中和你描述的不太一致。
3.0的版本都有这个问题, 在CCRender.h中类Render静态常亮VBO_SIZE = 65536 / 6,预定义的值太大,导致后面V3F_C4B_T2F_Quad _quads;GLushort _indices; 顶点bUFFER和索引BUFFER很大,在每个渲染批次中调用了glBufferSubData,这个函数在效率上好像是很低的,很多资料都不建议使用,其实cocos2dx这样做存在很大的问题,对于小游戏来说128个这样的buffer完全够用的, 最好采用动态增长buffer大小, 可以参考下CEGUI的渲染器
Hi,感谢你的反馈
代码中没有找到glBufferSubData这一部分的代码,具体遇到的性能问题是在哪一块,望告知。
查看下了RC版本的已经移除glBufferSubData, 在beta版本中是使用了glBufferSubData 这个函数的,RC版本我没试过在小米,MX2,还有三星机型上 是否有问题,BETA版本的确是有问题的,cocos的渲染器写的太乱了,在架构上对于2D游戏引擎来说有些不合理。封装度不够高,gl…函数在引擎中随处可见, 不利于引擎健康发展
吓傻了 对于我这种不懂coco底层 只会使用api的人来说 遇到这种问题 简直就是要跳楼啊
感谢你对性能问题的反馈,如果有其他的性能反馈问题,也欢迎联系我们。
对于gl函数在引擎中管理的问题,我们已经记录,并且从3.0开始,我们也在逐步的把底层代码封装起来。
这一块如果有好的建议和想法,也欢迎提出来。
谢谢。
我们的目的就是把这些底层复杂容易出错的东西在引擎中处理好,让开发者们更加方便的用API开发自己的游戏产品。
这哥们研究的挺深刻。。支持
mark







这功底 俺们还远远不够啊 
我cocos3.4把值改成1024崩溃闪退了程序=。=