cocos2d-x 3.10 绘制效率BUG

cocos2d-x 3.10 开发的游戏在android真机测试
GL VERTS 568 GL CALLS 22 fps 却不到50 改为cocos2d-x 3.5 fps 满60
coco2d-x 3.5开发的游戏 GL VERTS 826 GL CALLS 44 fps满60

为什么新版本的绘制效率没低版本的高;

希望各路大神帮小弟解答下

能把你的代码分享一下吗?还有,你是用它同一台机器测试的吗?

是同一台测试机 华为荣耀7i

最后我又找了一台小米2S测试 发现FPS为60
代码是公司的项目不好公开,希望你能留一个邮箱地址 我发给你;
再次感谢

@kylin520 你可以关注一下这个issue:https://github.com/cocos2d/cocos2d-x/issues/15652
里面有提供一个解决方案


void Renderer::setupVBO()
{
    glGenBuffers(2, &_buffersVBO[0]);
//    mapBuffers();   // Comment this line
}

也就是把 mapBuffers(); 这行注释了。具体分析见那个issue。

注释后添加的粒子效果显示不出来, 屏幕左下角的相关GL 数据显示不出

3.10的实现有点不一样,你可以试一下修改代码如下

void Renderer::setupVBO()
{
    glGenBuffers(2, &_buffersVBO[0]);
    glGenBuffers(2, &_quadbuffersVBO[0]);
    mapBuffers();
}

void Renderer::mapBuffers()
{
    // Avoid changing the element buffer for whatever VAO might be bound.
    GL::bindVAO(0);

// comment the following lines
//    glBindBuffer(GL_ARRAY_BUFFER, _buffersVBO[0]);
//    glBufferData(GL_ARRAY_BUFFER, sizeof(_verts[0]) * VBO_SIZE, _verts, GL_DYNAMIC_DRAW);
//    
//    glBindBuffer(GL_ARRAY_BUFFER, _quadbuffersVBO[0]);
//    glBufferData(GL_ARRAY_BUFFER, sizeof(_quadVerts[0]) * VBO_SIZE, _quadVerts, GL_DYNAMIC_DRAW);

    glBindBuffer(GL_ARRAY_BUFFER, 0);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _buffersVBO[1]);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(_indices[0]) * INDEX_VBO_SIZE, _indices, GL_STATIC_DRAW);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _quadbuffersVBO[1]);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(_quadIndices[0]) * INDEX_VBO_SIZE, _quadIndices, GL_STATIC_DRAW);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

    CHECK_GL_ERROR_DEBUG();
}

注释掉Renderer::mapBuffers()的几行代码。

3.11.1有这个问题吗?好不容易狠下心来把3.4工程升级到了最新版了,问题这么多,是要回滚的节奏?希望官方尽快把新版的效率提升一下,多比较几个版本的效率,新版的效率低,又臃肿,谁还敢升级啊……真心希望官方能把3D库彻底剥离出来,重编一次工程要十几分钟啊(1000块钱的SSD),希望别人提到cocos2dx的时候,能想到的高效,小巧,稳定!!!

注释的这几行是啥用的?会不会影响正常功能啊?nexus5x这么改后终于正常了,效率大增。

@cjv123 没有影响,具体的原因见这里的说明

@zx504287 这个问题是在即将发布的版本里解决的。对于3.11你只需要注释掉我上面提到的那行代码就可以了。当初的需求是需要把代码合在一起,省去各个库依赖的问题。现在如果再分出去的话,会带来兼容性破坏问题。这个只能是在v4版本时再重新考虑了。

你好, 是指把整个方法内部的代码全部注释掉吗? 我用的是3.10

3.10的话可以见我上面的评论。

你好按照上面的修改:
1、 ios 运行正常
2、android 红米note3正常
3、康佳电视启动后崩溃

我们发布的apk将会运行在乐视电视 大麦盒子等电视上

@minggo,不敢随便改,求3.11.1的ccRenderer.cpp整个文件。3.12什么时候发布?是github上面的v3分支,还是v3.12分支稳定些?如果3.12问题比较少,那我就直接升级到3.12好了,游戏马上上线测试了,捉急啊……

3.12计划是今天发布,不过测试还没测试完,估计有点悬。3.12对应的是v3.12分支,这个分支到时就是发布3.12的。

单独用别的版本的某个文件替换是危险的。

你的修改是严格按照上面的修改吗?

性能有提升吗?

修改后才导致的吗?具体的错误堆栈有吗?我这里没有康佳电视可以测试。

不好意思 不是修改那个导致的 测试发现是加载cocos studio 内容耗时太多 可能卡死了 手写代码 搭建场景 修复了