diff options
Diffstat (limited to 'src/mbgl/programs/symbol_program.hpp')
-rw-r--r-- | src/mbgl/programs/symbol_program.hpp | 116 |
1 files changed, 66 insertions, 50 deletions
diff --git a/src/mbgl/programs/symbol_program.hpp b/src/mbgl/programs/symbol_program.hpp index f614181a1e..1bbd768503 100644 --- a/src/mbgl/programs/symbol_program.hpp +++ b/src/mbgl/programs/symbol_program.hpp @@ -206,7 +206,8 @@ public: uint16_t ty, const Range<float>& sizeData, bool isSDF) { - const uint16_t aSizeMin = (std::min(MAX_PACKED_SIZE, static_cast<uint16_t>(sizeData.min * SIZE_PACK_FACTOR)) << 1) + uint16_t(isSDF); + const uint16_t aSizeMin = + (std::min(MAX_PACKED_SIZE, static_cast<uint16_t>(sizeData.min * SIZE_PACK_FACTOR)) << 1) + uint16_t(isSDF); const uint16_t aSizeMax = std::min(MAX_PACKED_SIZE, static_cast<uint16_t>(sizeData.max * SIZE_PACK_FACTOR)); return { // combining pos and offset to reduce number of vertex attributes passed to shader (8 max for some devices) @@ -416,60 +417,39 @@ enum class SymbolSDFPart { Halo = 0 }; +using SymbolSDFProgramUniforms = TypeList<uniforms::matrix, + uniforms::label_plane_matrix, + uniforms::coord_matrix, + uniforms::extrude_scale, + uniforms::texsize, + uniforms::fade_change, + uniforms::is_text, + uniforms::camera_to_center_distance, + uniforms::pitch, + uniforms::pitch_with_map, + uniforms::rotate_symbol, + uniforms::aspect_ratio, + uniforms::gamma_scale, + uniforms::device_pixel_ratio, + uniforms::is_halo>; + template <class Name, class PaintProperties> -class SymbolSDFProgram : public SymbolProgram< - Name, - gfx::PrimitiveType::Triangle, - SymbolLayoutAttributes, - TypeList< - uniforms::matrix, - uniforms::label_plane_matrix, - uniforms::coord_matrix, - uniforms::extrude_scale, - uniforms::texsize, - uniforms::fade_change, - uniforms::is_text, - uniforms::camera_to_center_distance, - uniforms::pitch, - uniforms::pitch_with_map, - uniforms::rotate_symbol, - uniforms::aspect_ratio, - uniforms::gamma_scale, - uniforms::device_pixel_ratio, - uniforms::is_halo>, - TypeList< - textures::texture>, - PaintProperties> -{ +class SymbolSDFProgram : public SymbolProgram<Name, + gfx::PrimitiveType::Triangle, + SymbolLayoutAttributes, + SymbolSDFProgramUniforms, + TypeList<textures::texture>, + PaintProperties> { public: - using BaseProgram = SymbolProgram< - Name, - gfx::PrimitiveType::Triangle, - SymbolLayoutAttributes, - TypeList< - uniforms::matrix, - uniforms::label_plane_matrix, - uniforms::coord_matrix, - uniforms::extrude_scale, - uniforms::texsize, - uniforms::fade_change, - uniforms::is_text, - uniforms::camera_to_center_distance, - uniforms::pitch, - uniforms::pitch_with_map, - uniforms::rotate_symbol, - uniforms::aspect_ratio, - uniforms::gamma_scale, - uniforms::device_pixel_ratio, - uniforms::is_halo>, - TypeList< - textures::texture>, - PaintProperties>; + using BaseProgram = SymbolProgram<Name, + gfx::PrimitiveType::Triangle, + SymbolLayoutAttributes, + SymbolSDFProgramUniforms, + TypeList<textures::texture>, + PaintProperties>; using LayoutUniformValues = typename BaseProgram::LayoutUniformValues; - - using BaseProgram::BaseProgram; static LayoutUniformValues layoutUniformValues(const bool isText, @@ -485,6 +465,40 @@ public: const SymbolSDFPart); }; +using SymbolTextAndIconProgramUniforms = TypeList<uniforms::texsize_icon>; + +class SymbolTextAndIconProgram + : public SymbolProgram<SymbolTextAndIconProgram, + gfx::PrimitiveType::Triangle, + SymbolLayoutAttributes, + TypeListConcat<SymbolSDFProgramUniforms, SymbolTextAndIconProgramUniforms>, + TypeList<textures::texture, textures::texture_icon>, + style::TextPaintProperties> { +public: + using BaseProgram = SymbolProgram<SymbolTextAndIconProgram, + gfx::PrimitiveType::Triangle, + SymbolLayoutAttributes, + TypeListConcat<SymbolSDFProgramUniforms, SymbolTextAndIconProgramUniforms>, + TypeList<textures::texture, textures::texture_icon>, + style::TextPaintProperties>; + + using LayoutUniformValues = typename BaseProgram::LayoutUniformValues; + + using BaseProgram::BaseProgram; + + static LayoutUniformValues layoutUniformValues(const bool hasVariablePacement, + const style::SymbolPropertyValues&, + const Size& texsize, + const Size& texsize_icon, + const std::array<float, 2>& pixelsToGLUnits, + const float pixelRatio, + const bool alongLine, + const RenderTile&, + const TransformState&, + const float SymbolFadeChange, + const SymbolSDFPart); +}; + class SymbolSDFIconProgram : public SymbolSDFProgram<SymbolSDFIconProgram, style::IconPaintProperties> { public: using SymbolSDFProgram::SymbolSDFProgram; @@ -505,11 +519,13 @@ public: : symbolIcon(context, programParameters), symbolIconSDF(context, programParameters), symbolGlyph(context, programParameters), + symbolTextAndIcon(context, programParameters), collisionBox(context, programParameters), collisionCircle(context, programParameters) {} SymbolIconProgram symbolIcon; SymbolSDFIconProgram symbolIconSDF; SymbolSDFTextProgram symbolGlyph; + SymbolTextAndIconProgram symbolTextAndIcon; CollisionBoxProgram collisionBox; CollisionCircleProgram collisionCircle; }; |