summaryrefslogtreecommitdiff
path: root/src/mbgl/programs/symbol_program.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/programs/symbol_program.hpp')
-rw-r--r--src/mbgl/programs/symbol_program.hpp116
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;
};