| 710 | } |
| 711 | |
| 712 | void Label::updateShaderProgram() |
| 713 | { |
| 714 | uint32_t programType = backend::ProgramType::POSITION_TEXTURE_COLOR; |
| 715 | if (_currentLabelType == LabelType::BMFONT || _currentLabelType == LabelType::CHARMAP) |
| 716 | { |
| 717 | auto texture = _getTexture(this); |
| 718 | if (texture) |
| 719 | { |
| 720 | programType = |
| 721 | backend::ProgramStateRegistry::getInstance()->getProgramType(programType, texture->getSamplerFlags()); |
| 722 | } |
| 723 | } |
| 724 | else |
| 725 | { |
| 726 | switch (_currLabelEffect) |
| 727 | { |
| 728 | case ax::LabelEffect::NORMAL: |
| 729 | if (_useDistanceField) |
| 730 | programType = backend::ProgramType::LABEL_DISTANCE_NORMAL; |
| 731 | else if (_useA8Shader) |
| 732 | programType = backend::ProgramType::LABEL_NORMAL; |
| 733 | else |
| 734 | { |
| 735 | auto texture = _getTexture(this); |
| 736 | if (texture) |
| 737 | { |
| 738 | programType = backend::ProgramStateRegistry::getInstance()->getProgramType( |
| 739 | programType, texture->getSamplerFlags()); |
| 740 | } |
| 741 | } |
| 742 | break; |
| 743 | case ax::LabelEffect::OUTLINE: |
| 744 | programType = |
| 745 | _useDistanceField ? backend::ProgramType::LABEL_DISTANCE_OUTLINE : backend::ProgramType::LABLE_OUTLINE; |
| 746 | break; |
| 747 | case ax::LabelEffect::GLOW: |
| 748 | if (_useDistanceField) |
| 749 | programType = backend::ProgramType::LABLE_DISTANCE_GLOW; |
| 750 | break; |
| 751 | default: |
| 752 | return; |
| 753 | } |
| 754 | } |
| 755 | |
| 756 | this->setProgramStateByProgramId(programType); |
| 757 | |
| 758 | updateUniformLocations(); |
| 759 | |
| 760 | for (auto&& batch : _batchCommands) |
| 761 | updateBatchCommand(batch); |
| 762 | |
| 763 | auto& quadPipeline = _quadCommand.getPipelineDescriptor(); |
| 764 | quadPipeline.programState = _programState; |
| 765 | } |
| 766 | |
| 767 | void Label::updateBatchCommand(Label::BatchCommand& batch) |
| 768 | { |
nothing calls this directly
no test coverage detected