Director

Director
主要函数预览

//openGL Matrix Operate
    void pushMatrix(MATRIX_STACK_TYPE type);
    void popMatrix(MATRIX_STACK_TYPE type);
    void loadIdentityMatrix(MATRIX_STACK_TYPE type);
    void loadMatrix(MATRIX_STACK_TYPE type, const Mat4& mat);
    void multiplyMatrix(MATRIX_STACK_TYPE type, const Mat4& mat);
    Mat4 getMatrix(MATRIX_STACK_TYPE type);
    void resetMatrixStack();

//View Data
    inline double getAnimationInterval();
    inline bool isDisplayStats();
    inline GLView* getOpenGLView();
    inline Projection getProjection();
    Size getVisibleSize() const;

    Vec2 getVisibleOrigin() const;
    Vec2 convertToGL(const Vec2& point);
    Vec2 convertToUI(const Vec2& point);
    float getZEye() const;

// Scene 场景管理
    inline Scene* getRunningScene();
    void runWithScene(Scene *scene);
    void pushScene(Scene *scene);


// 控制绘制的暂停和恢复
    void end();
    void pause();
    void resume();

//绘制图形(界面展示最重要的函数)
    void drawScene();

//Getter and Setter
    Scheduler* getScheduler() const { return _scheduler; }
    void setScheduler(Scheduler* scheduler);

    ActionManager* getActionManager() const { return _actionManager; }
    void setActionManager(ActionManager* actionManager);

    EventDispatcher* getEventDispatcher() const { return _eventDispatcher; }
    void setEventDispatcher(EventDispatcher* dispatcher);

    Renderer* getRenderer() const { return _renderer; }

drawScene


void Director::drawScene()
{
    calculateDeltaTime();
    if (_openGLView)
    {
        _openGLView->pollEvents();
    }
    if (! _paused)
    {
        //Dispatcher 抛发事件.
        _eventDispatcher->dispatchEvent(_eventBeforeUpdate); 
        //Scheduler 定时器 更新
        _scheduler->update(_deltaTime);
        _eventDispatcher->dispatchEvent(_eventAfterUpdate);
    }
     //glClear
    _renderer->clear();
    experimental::FrameBuffer::clearAllFBOs();

    if (_nextScene)
    {//取得下一个将要显示的Scene.
        setNextScene();
    }
    //将上一次绘制的Context放到堆栈
    pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);

    if (_runningScene)
    {
#if (CC_USE_PHYSICS || (CC_USE_3D_PHYSICS && CC_ENABLE_BULLET_INTEGRATION) || CC_USE_NAVMESH)
        _runningScene->stepPhysicsAndNavigation(_deltaTime);
#endif
        //clear draw stats
        _renderer->clearDrawStats();

        //渲染场景 
        _openGLView->renderScene(_runningScene, _renderer);

        _eventDispatcher->dispatchEvent(_eventAfterVisit);
    }

    // draw the notifications node
    if (_notificationNode)
    {
        _notificationNode->visit(_renderer, Mat4::IDENTITY, 0);
    }

    updateFrameRate();

    if (_displayStats)
    {
        showStats();
    }
    //渲染
    _renderer->render();

    _eventDispatcher->dispatchEvent(_eventAfterDraw);
//返回到上一次绘制时的状态.    popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);

    _totalFrames++;

     //把上面渲染的结果显示到屏幕
    if (_openGLView)
    {
        _openGLView->swapBuffers();
    }

    if (_displayStats)
    {
        calculateMPF();
    }
}

_openGLView->renderScene(_runningScene, _renderer);
里面是scene->render(renderer, Mat4::IDENTITY, nullptr);
后面就开始看看 scene 的render方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值