zoukankan      html  css  js  c++  java
  • cocos2dx 3.0 研究(4)渲染分析

    http://blog.csdn.net/epeaktop/article/details/26730909中已经说明了程序的设计,让我们来看看在cocos2dx 3.0中代码是怎样实现的。

    void Sprite::draw(Renderer *renderer, const kmMat4 &transform, bool transformUpdated)
    {
        // Don't do calculate the culling if the transform was not updated
        _insideBounds = transformUpdated ? renderer->checkVisibility(transform, _contentSize) : _insideBounds;
    
        if(_insideBounds)
        {
            
            _quadCommand.init(_globalZOrder, _texture->getName(), _shaderProgram, _blendFunc, &_quad, 1, transform);
            renderer->addCommand(&_quadCommand);
        }
    }


    renderer->addCommand 将运行的指令放到一个队列中。

    然后在统一的处理,在drawScence函数中能够观察到先调用visit()。然后在调用render()

    然而没有发现http://blog.csdn.net/epeaktop/article/details/26730909的设计的相关实现。依然是主线程在做这些事情。why?眼下还在确认之中。有知道的童鞋请告诉我吧!

    对此我还是有点失望,引擎还是没有质的飞跃。

    官方文档阐述相关实现如图


    visit()函数增加render queque中。render 负责排序;然后运行命令。

    官方的说法这样做是为了解决v2.2这种问题

    1、draw() order == visit() order //  这么做的目的是?

    2、Difficult to optimize(No auto-batching)// 不好优化。后面会讲到

    3、Difficult to extend and maintain(Lots of OpenGL command in Nodes)// 不好扩展和维护

    在游戏的绘制渲染中,往往消耗非常多资源和内存。当绘制精灵数量越多,游戏的卡顿会非常明显,为了优化和提升渲染效率。

    Cocos2d-x为我们提供了Auto-batching和SpriteBatchNode。

    Auto-batching 意思是Renderer将多次draw的调用打包成一次big Draw 调用。(又名批处理)。



    SpriteBatchNode 主要用于批量绘制精灵提高精灵的绘制效率的。须要绘制的精灵数量越多。效果越明显。



    Auto-batching

    在3.0版本号实现了引擎的逻辑代码与渲染代码的分离,实现了Auto Batch与Auto Culling功能。不再推荐使用SpriteBatchNode提高精灵的绘制效率。

    Auto-culling的支持,Sprite在绘制时会进行检查。超出屏幕的不会发给渲染, 可见渲染的效率还是有改进的,

                auto cmd = static_cast<QuadCommand*>(command);
                //Batch quads
                if(_numQuads + cmd->getQuadCount() > VBO_SIZE)
                {                
                    //Draw batched quads if VBO is full
                    drawBatchedQuads(); // 真正的调用显卡渲染程序glDrawElements
                }



    针对大资源的渲染解决方式參考

    http://www.jb51.net/article/49439.htm

  • 相关阅读:
    UVA 254 Towers of Hanoi
    UVA 701 The Archeologists' Dilemma
    UVA 185 Roman Numerals
    UVA 10994 Simple Addition
    UVA 10570 Meeting with Aliens
    UVA 306 Cipher
    UVA 10160 Servicing Stations
    UVA 317 Hexagon
    UVA 10123 No Tipping
    UVA 696 How Many Knights
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5245700.html
Copyright © 2011-2022 走看看