展会信息港展会大全

cocos3——1.引擎运行流程
来源:互联网   发布日期:2015-09-27 15:11:58   浏览:2884次  

导读:1.程序入口 // create the application instance AppDelegate app; return Application::getInstance()-run();2.主循环 int Application::run(): while(!glview-windowShouldClose()) { QueryPerformanceCounter(nNow); if (nNow.QuadPart - nLast.QuadPart...

1.程序入口

// create the application instance

AppDelegate app;

return Application::getInstance()->run();2.主循环

int Application::run():

while(!glview->windowShouldClose())

{

QueryPerformanceCounter(&nNow);

if (nNow.QuadPart - nLast.QuadPart > _animationInterval.QuadPart)

{

nLast.QuadPart = nNow.QuadPart;

// 导演的主循环

director->mainLoop();

glview->pollEvents();

}

else

{

Sleep(0);

}

}mainLoop->drawScene:

pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);

if (_runningScene)

{

//clear draw stats

_renderer->clearDrawStats();

// visit和draw场景(但draw只是添加渲染命令)

// 进行渲染命令是在:renderer->render();

//render the scene

_runningScene->render(_renderer);

_eventDispatcher->dispatchEvent(_eventAfterVisit);

}

// 通知节点,独立于场景之后渲染

// draw the notifications node

if (_notificationNode)

{

_notificationNode->visit(_renderer, Mat4::IDENTITY, 0);

}

if (_displayStats)

{

showStats();

}

// 下面是渲染_notificationNode和stats

_renderer->render();

_eventDispatcher->dispatchEvent(_eventAfterDraw);

popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);

_totalFrames++;

// swap buffers

if (_openGLView)

{

_openGLView->swapBuffers();

}

void Scene::render(Renderer* renderer):

Camera::_visitingCamera = defaultCamera;

director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);

director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, Camera::_visitingCamera->getViewProjectionMatrix());

//visit the scene

visit(renderer, Mat4::IDENTITY, 0);

renderer->render();

director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);

3.节点遍历

void Node::visit(Renderer* renderer, const Mat4 &parentTransform, uint32_t parentFlags):

// quick return if not visible. children won't be drawn.

if (!_visible)

{

return;

}

uint32_t flags = processParentFlags(parentTransform, parentFlags);

// IMPORTANT:

// To ease the migration to v3.0, we still support the Mat4 stack,

// but it is deprecated and your code should not rely on it

Director* director = Director::getInstance();

director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);

director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);

bool visibleByCamera = isVisitableByVisitingCamera();

int i = 0;

if(!_children.empty())

{

sortAllChildren();

// draw children zOrder _localZOrder visit(renderer, _modelViewTransform, flags);

else

break;

}

// self draw

if (visibleByCamera)

this->draw(renderer, _modelViewTransform, flags);

for(auto it=_children.cbegin()+i; it != _children.cend(); ++it)

(*it)->visit(renderer, _modelViewTransform, flags);

}

else if (visibleByCamera)

{

this->draw(renderer, _modelViewTransform, flags);

}

director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);

赞助本站

人工智能实验室
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港