//------------------------------------------------------------------------------ void QSceneTextureBatch::draw(void) { // Optimization: Fast Dispatch if (getTotalQuads() == 0) return; // Set shaders and states m_FirstSprite->drawSetup(); // Draw all quads in batch drawQuads(); }
void Label::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags) { if (_batchNodes.empty() || _lengthOfString <= 0) { return; } // Don't do calculate the culling if the transform was not updated bool transformUpdated = flags & FLAGS_TRANSFORM_DIRTY; #if CC_USE_CULLING auto visitingCamera = Camera::getVisitingCamera(); auto defaultCamera = Camera::getDefaultCamera(); if (visitingCamera == defaultCamera) { _insideBounds = (transformUpdated || visitingCamera->isViewProjectionUpdated()) ? renderer->checkVisibility(transform, _contentSize) : _insideBounds; } else { _insideBounds = renderer->checkVisibility(transform, _contentSize); } if (_insideBounds) #endif { if (!_shadowEnabled && (_currentLabelType == LabelType::BMFONT || _currentLabelType == LabelType::CHARMAP)) { for (auto&& it : _letters) { it.second->updateTransform(); } auto textureAtlas = _batchNodes.at(0)->getTextureAtlas(); _quadCommand.init(_globalZOrder, textureAtlas->getTexture()->getName(), getGLProgramState(), _blendFunc, textureAtlas->getQuads(), textureAtlas->getTotalQuads(), transform, flags); renderer->addCommand(&_quadCommand); } else { _customCommand.init(_globalZOrder, transform, flags); _customCommand.func = CC_CALLBACK_0(Label::onDraw, this, transform, transformUpdated); renderer->addCommand(&_customCommand); } } }