中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

簡述CCNode和Sprite的渲染過程-創(chuàng)新互聯(lián)

Sprite創(chuàng)建時,加載紋理,產(chǎn)生紋理id。Sprite重寫(override)Node中的draw

成都創(chuàng)新互聯(lián)公司是一家專業(yè)從事網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計的品牌網(wǎng)絡公司。如今是成都地區(qū)具影響力的網(wǎng)站設(shè)計公司,作為專業(yè)的成都網(wǎng)站建設(shè)公司,成都創(chuàng)新互聯(lián)公司依托強大的技術(shù)實力、以及多年的網(wǎng)站運營經(jīng)驗,為您提供專業(yè)的成都網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)及網(wǎng)站設(shè)計開發(fā)服務!

void Sprite::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)

{

  // Don't do calculate the culling if the transform was not updated

  _insideBounds = (flags & FLAGS_TRANSFORM_DIRTY) ? renderer->checkVisibility(transform, _contentSize) : _insideBounds;

  if(_insideBounds)

  {

      _quadCommand.init(_globalZOrder, _texture->getName(), getGLProgramState(), _blendFunc, &_quad, 1, transform);

      renderer->addCommand(&_quadCommand);

#if CC_SPRITE_DEBUG_DRAW

      _debugDrawNode->clear();

      Vec2 vertices[4] = {

          Vec2( _quad.bl.vertices.x, _quad.bl.vertices.y ),

          Vec2( _quad.br.vertices.x, _quad.br.vertices.y ),

          Vec2( _quad.tr.vertices.x, _quad.tr.vertices.y ),

          Vec2( _quad.tl.vertices.x, _quad.tl.vertices.y ),

      };

      _debugDrawNode->drawPoly(vertices, 4, true, Color4F(1.0, 1.0, 1.0, 1.0));

#endif //CC_SPRITE_DEBUG_DRAW

  }

}

將對應的頂點信息,紋理id,視圖矩陣加入render隊列。

draw函數(shù)在什么時候被調(diào)用?

請看Node中的visit函數(shù)

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 < 0

      for( ; i < _children.size(); i++ )

      {

          auto node = _children.at(i);

          if ( node && node->_localZOrder < 0 )

              node->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);

  // FIX ME: Why need to set _orderOfArrival to 0??

  // Please refer to https://github.com/cocos2d/cocos2d-x/pull/6920

  // reset for next frame

  // _orderOfArrival = 0;

}

visit首先根據(jù)zorder排列子節(jié)點,先調(diào)用zorder小于0的子節(jié)點的draw函數(shù),再調(diào)用自身的draw,接著再調(diào)用zorder大于0的子節(jié)點的draw函數(shù),最后渲染時,按照render中隊列的先后順序,渲染所有節(jié)點。

void Director::drawScene()

if (_runningScene)

  {

      //clear draw stats

      _renderer->clearDrawStats();

   

      //render the scene

      _runningScene->render(_renderer);---------調(diào)用所有節(jié)點的visit和draw函數(shù),添加節(jié)點渲染信息到渲染隊列中

   

      _eventDispatcher->dispatchEvent(_eventAfterVisit);

  }

  // draw the notifications node

  if (_notificationNode)

  {

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

  }

  if (_displayStats)

  {

      showStats();

  }

  _renderer->render();------------------渲染所有節(jié)點

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。

本文名稱:簡述CCNode和Sprite的渲染過程-創(chuàng)新互聯(lián)
標題URL:http://www.rwnh.cn/article20/dghijo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、用戶體驗、網(wǎng)站設(shè)計、網(wǎng)站排名網(wǎng)站建設(shè)、網(wǎng)站設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
三河市| 临西县| 奉化市| 枣阳市| 左贡县| 谷城县| 嘉兴市| 大城县| 驻马店市| 左权县| 扎鲁特旗| 日照市| 岳阳县| 三门峡市| 图木舒克市| 石狮市| 平利县| 孙吴县| 屏东县| 慈溪市| 综艺| 壤塘县| 平南县| 平陆县| 武夷山市| 巨鹿县| 磴口县| 荔浦县| 南投县| 乐清市| 东乌| 东港市| 尼玛县| 安龙县| 诸暨市| 辽阳市| 上杭县| 云安县| 望江县| 望谟县| 淮南市|