| 722 | } |
| 723 | |
| 724 | void Label::render() { |
| 725 | if (_font && _font->getInfo().sdf && _effect) { |
| 726 | const auto& passes = _effect->getPasses(); |
| 727 | if (!passes.empty()) { |
| 728 | passes.front()->set("u_smooth"sv, _smooth.x, _smooth.y, _outlineWidth, 0.0f); |
| 729 | passes.front()->set("u_outlineColor"sv, _outlineColor); |
| 730 | } |
| 731 | } |
| 732 | |
| 733 | if (_flags.isOff(Label::TextBatched)) { |
| 734 | Node::render(); |
| 735 | return; |
| 736 | } |
| 737 | |
| 738 | if (_flags.isOn(Label::QuadDirty)) { |
| 739 | _flags.setOff(Label::QuadDirty); |
| 740 | updateVertTexCoord(); |
| 741 | updateVertPosition(); |
| 742 | _flags.setOff(Label::VertexColorDirty); |
| 743 | _flags.setOn(Label::VertexPosDirty); |
| 744 | } |
| 745 | |
| 746 | if (_flags.isOn(Label::VertexColorDirty)) { |
| 747 | _flags.setOff(Label::VertexColorDirty); |
| 748 | updateVertColor(); |
| 749 | } |
| 750 | |
| 751 | if (SharedDirector.isFrustumCulling() && !_quadPos.empty()) { |
| 752 | float minX = _quadPos[0].lb.x; |
| 753 | float minY = _quadPos[0].lb.y; |
| 754 | float maxX = _quadPos[0].rt.x; |
| 755 | float maxY = _quadPos[0].rt.y; |
| 756 | for (size_t i = 1; i < _quadPos.size(); i++) { |
| 757 | const SpriteQuad::Position& quadPos = _quadPos[i]; |
| 758 | minX = std::min(minX, quadPos.lb.x); |
| 759 | minY = std::min(minY, quadPos.lb.y); |
| 760 | maxX = std::max(maxX, quadPos.rt.x); |
| 761 | maxY = std::max(maxY, quadPos.rt.y); |
| 762 | } |
| 763 | AABB aabb; |
| 764 | Matrix::mulAABB(aabb, getWorld(), { |
| 765 | {minX, minY, 0}, |
| 766 | {maxX, maxY, 0}, |
| 767 | }); |
| 768 | if (!SharedDirector.isInFrustum(aabb)) { |
| 769 | return; |
| 770 | } |
| 771 | } |
| 772 | |
| 773 | if (_flags.isOn(Label::VertexPosDirty)) { |
| 774 | _flags.setOff(Label::VertexPosDirty); |
| 775 | Matrix transform; |
| 776 | Matrix::mulMtx(transform, SharedDirector.getViewProjection(), getWorld()); |
| 777 | for (size_t i = 0; i < _quadPos.size(); i++) { |
| 778 | SpriteQuad& quad = _quads[i]; |
| 779 | SpriteQuad::Position& quadPos = _quadPos[i]; |
| 780 | Matrix::mulVec4(&quad.lt.x, transform, quadPos.lt); |
| 781 | Matrix::mulVec4(&quad.rt.x, transform, quadPos.rt); |
nothing calls this directly
no test coverage detected