cocos2d-x-3.0 draw vs onDraw

后端 未结 4 763
心在旅途
心在旅途 2020-12-29 00:02

I\'m using cocos2d-x v3.0 and in some test project I\'m doing some custom drawing by overriding Node\'s draw method, but in the DrawPrimitives exam

相关标签:
4条回答
  • 2020-12-29 00:28

    I use draw method for debugDraw Like this It may be helpful

    void HelloWorld::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
    {
        Layer::draw(renderer, transform, flags);
        Director* director = Director::getInstance();
        GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POSITION );
        director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
        world->DrawDebugData();
        director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
    }
    
    0 讨论(0)
  • 2020-12-29 00:37

    In future, cocos2d-x 3.x renderer will be multithreaded with command pool.

    draw method called by visit method, to create new command. When command is performed by command pool, onDraw is called. At this moment, commands are performed in single thread, but in overloaded onDraw method you should assume, that it will be called in another thread to simplify future migration.

    0 讨论(0)
  • 2020-12-29 00:38

    The draw() expression should be the same as the base class function. The draw method of Node for cocos 3.3rc is: virtual void draw(Renderer *renderer, const Mat4& transform, uint32_t flags);

    0 讨论(0)
  • 2020-12-29 00:46

    There is sample on cocos2d-x RC0 package that shows how to use the DrawPrimitives on top of other layers.

    On your Layer .h add the following:

    private:
        void onDrawPrimitives(const kmMat4 &transform, bool transformUpdated);
        CustomCommand _customCommand;
    

    Now in the cpp of the Layer, override the layer draw method and include the onDrawPrimitives method:

    void MyLayer::onDrawPrimitives(const kmMat4 &transform, bool transformUpdated)
    {
        kmGLPushMatrix();
        kmGLLoadMatrix(&transform);
    
        //add your primitive drawing code here
        DrawPrimitives::drawLine(ccp(0,0), ccp(100, 100));
    }
    
    void MyLayer::draw(Renderer *renderer, const kmMat4& transform, bool transformUpdated)
    {
        _customCommand.init(_globalZOrder);
        _customCommand.func = CC_CALLBACK_0(MyLayer::onDrawPrimitives, this, transform, transformUpdated);
        renderer->addCommand(&_customCommand);
    }
    
    0 讨论(0)
提交回复
热议问题