diff options
author | Chris Loer <chris.loer@gmail.com> | 2017-06-02 12:02:02 -0700 |
---|---|---|
committer | Chris Loer <chris.loer@gmail.com> | 2017-06-06 09:01:18 -0700 |
commit | 7c364ffcc5515917abd7710d00ba703480474405 (patch) | |
tree | e8940850614455a3396407561b604e47e187484a | |
parent | de0bda00a0b315739a0730ebc8b44227df2664a6 (diff) | |
download | qtlocation-mapboxgl-7c364ffcc5515917abd7710d00ba703480474405.tar.gz |
[core] [DO NOT MERGE] Prototype approach to subsetting symbol attribute binding
-rw-r--r-- | src/mbgl/programs/attributes.hpp | 10 | ||||
-rw-r--r-- | src/mbgl/programs/programs.hpp | 12 | ||||
-rw-r--r-- | src/mbgl/programs/symbol_program.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/programs/symbol_program.hpp | 143 | ||||
-rw-r--r-- | src/mbgl/renderer/buckets/symbol_bucket.hpp | 8 | ||||
-rw-r--r-- | src/mbgl/renderer/paint_property_binder.hpp | 24 | ||||
-rw-r--r-- | src/mbgl/renderer/painters/painter_symbol.cpp | 16 | ||||
-rw-r--r-- | src/mbgl/style/layers/symbol_layer_properties.hpp | 8 |
8 files changed, 123 insertions, 107 deletions
diff --git a/src/mbgl/programs/attributes.hpp b/src/mbgl/programs/attributes.hpp index 8d7841995b..4099978ddb 100644 --- a/src/mbgl/programs/attributes.hpp +++ b/src/mbgl/programs/attributes.hpp @@ -53,16 +53,6 @@ struct a_color { using Type = gl::Attribute<float, 2>; }; -struct a_fill_color { - static auto name() { return "a_fill_color"; } - using Type = gl::Attribute<float, 2>; -}; - -struct a_halo_color { - static auto name() { return "a_halo_color"; } - using Type = gl::Attribute<float, 2>; -}; - struct a_stroke_color { static auto name() { return "a_stroke_color"; } using Type = gl::Attribute<float, 2>; diff --git a/src/mbgl/programs/programs.hpp b/src/mbgl/programs/programs.hpp index ff6b1cd505..6a4a35cf24 100644 --- a/src/mbgl/programs/programs.hpp +++ b/src/mbgl/programs/programs.hpp @@ -29,8 +29,10 @@ public: linePattern(context, programParameters), raster(context, programParameters), symbolIcon(context, programParameters), - symbolIconSDF(context, programParameters), - symbolGlyph(context, programParameters), + symbolSDFIconFill(context, programParameters), + symbolSDFIconHalo(context, programParameters), + symbolSDFTextFill(context, programParameters), + symbolSDFTextHalo(context, programParameters), debug(context, ProgramParameters(programParameters.pixelRatio, false, programParameters.cacheDir)), collisionBox(context, ProgramParameters(programParameters.pixelRatio, false, programParameters.cacheDir)) { } @@ -48,8 +50,10 @@ public: LinePatternProgram linePattern; RasterProgram raster; SymbolIconProgram symbolIcon; - SymbolSDFIconProgram symbolIconSDF; - SymbolSDFTextProgram symbolGlyph; + SymbolSDFIconFillProgram symbolSDFIconFill; + SymbolSDFIconHaloProgram symbolSDFIconHalo; + SymbolSDFTextFillProgram symbolSDFTextFill; + SymbolSDFTextHaloProgram symbolSDFTextHalo; DebugProgram debug; CollisionBoxProgram collisionBox; diff --git a/src/mbgl/programs/symbol_program.cpp b/src/mbgl/programs/symbol_program.cpp index bd43237b8f..d224f3bac2 100644 --- a/src/mbgl/programs/symbol_program.cpp +++ b/src/mbgl/programs/symbol_program.cpp @@ -84,8 +84,8 @@ SymbolIconProgram::uniformValues(const bool isText, ); } -template <class PaintProperties> -typename SymbolSDFProgram<PaintProperties>::UniformValues SymbolSDFProgram<PaintProperties>::uniformValues( +SymbolSDFUniforms::Values +symbolSDFUniformValues( const bool isText, const style::SymbolPropertyValues& values, const Size& texsize, @@ -98,7 +98,7 @@ typename SymbolSDFProgram<PaintProperties>::UniformValues SymbolSDFProgram<Paint ? std::cos(state.getPitch()) : 1.0) * state.getCameraToCenterDistance(); - return makeValues<SymbolSDFProgram<PaintProperties>::UniformValues>( + return makeValues<SymbolSDFUniforms::Values>( isText, values, texsize, @@ -113,7 +113,4 @@ typename SymbolSDFProgram<PaintProperties>::UniformValues SymbolSDFProgram<Paint ); } -template class SymbolSDFProgram<style::IconPaintProperties>; -template class SymbolSDFProgram<style::TextPaintProperties>; - } // namespace mbgl diff --git a/src/mbgl/programs/symbol_program.hpp b/src/mbgl/programs/symbol_program.hpp index 9ca55a704a..091de72e9d 100644 --- a/src/mbgl/programs/symbol_program.hpp +++ b/src/mbgl/programs/symbol_program.hpp @@ -409,7 +409,10 @@ class SymbolIconProgram : public SymbolProgram< uniforms::u_camera_to_center_distance, uniforms::u_pitch, uniforms::u_max_camera_distance>, - style::IconPaintProperties> + style::Properties< + style::IconOpacity, + style::IconTranslate, + style::IconTranslateAnchor>> { public: using SymbolProgram::SymbolProgram; @@ -427,75 +430,85 @@ enum class SymbolSDFPart { Halo = 0 }; -template <class PaintProperties> -class SymbolSDFProgram : public SymbolProgram< +using SymbolSDFUniforms = gl::Uniforms< + uniforms::u_matrix, + uniforms::u_extrude_scale, + uniforms::u_texsize, + uniforms::u_zoom, + uniforms::u_rotate_with_map, + uniforms::u_texture, + uniforms::u_fadetexture, + uniforms::u_is_text, + uniforms::u_collision_y_stretch, + uniforms::u_camera_to_center_distance, + uniforms::u_pitch, + uniforms::u_max_camera_distance, + uniforms::u_gamma_scale, + uniforms::u_pitch, + uniforms::u_bearing, + uniforms::u_aspect_ratio, + uniforms::u_pitch_with_map, + uniforms::u_is_halo>; + +SymbolSDFUniforms::Values +symbolSDFUniformValues(const bool isText, + const style::SymbolPropertyValues&, + const Size& texsize, + const std::array<float, 2>& pixelsToGLUnits, + const RenderTile&, + const TransformState&, + const SymbolSDFPart); + +using SymbolSDFIconFillProgram = SymbolProgram< shaders::symbol_sdf, gl::Triangle, SymbolLayoutAttributes, - gl::Uniforms< - uniforms::u_matrix, - uniforms::u_extrude_scale, - uniforms::u_texsize, - uniforms::u_zoom, - uniforms::u_rotate_with_map, - uniforms::u_texture, - uniforms::u_fadetexture, - uniforms::u_is_text, - uniforms::u_collision_y_stretch, - uniforms::u_camera_to_center_distance, - uniforms::u_pitch, - uniforms::u_max_camera_distance, - uniforms::u_gamma_scale, - uniforms::u_bearing, - uniforms::u_aspect_ratio, - uniforms::u_pitch_with_map, - uniforms::u_is_halo>, - PaintProperties> -{ -public: - using BaseProgram = SymbolProgram<shaders::symbol_sdf, - gl::Triangle, - SymbolLayoutAttributes, - gl::Uniforms< - uniforms::u_matrix, - uniforms::u_extrude_scale, - uniforms::u_texsize, - uniforms::u_zoom, - uniforms::u_rotate_with_map, - uniforms::u_texture, - uniforms::u_fadetexture, - uniforms::u_is_text, - uniforms::u_collision_y_stretch, - uniforms::u_camera_to_center_distance, - uniforms::u_pitch, - uniforms::u_max_camera_distance, - uniforms::u_gamma_scale, - uniforms::u_bearing, - uniforms::u_aspect_ratio, - uniforms::u_pitch_with_map, - uniforms::u_is_halo>, - PaintProperties>; - - using UniformValues = typename BaseProgram::UniformValues; - - - - using BaseProgram::BaseProgram; - - static UniformValues uniformValues(const bool isText, - const style::SymbolPropertyValues&, - const Size& texsize, - const std::array<float, 2>& pixelsToGLUnits, - const RenderTile&, - const TransformState&, - const SymbolSDFPart); -}; - -using SymbolSDFIconProgram = SymbolSDFProgram<style::IconPaintProperties>; -using SymbolSDFTextProgram = SymbolSDFProgram<style::TextPaintProperties>; + SymbolSDFUniforms, + style::Properties< + style::IconOpacity, + style::IconTranslate, + style::IconTranslateAnchor, + style::IconColor>>; + +using SymbolSDFIconHaloProgram = SymbolProgram< + shaders::symbol_sdf, + gl::Triangle, + SymbolLayoutAttributes, + SymbolSDFUniforms, + style::Properties< + style::IconOpacity, + style::IconTranslate, + style::IconTranslateAnchor, + style::IconHaloColor, + style::IconHaloWidth, + style::IconHaloBlur>>; + +using SymbolSDFTextFillProgram = SymbolProgram< + shaders::symbol_sdf, + gl::Triangle, + SymbolLayoutAttributes, + SymbolSDFUniforms, + style::Properties< + style::TextOpacity, + style::TextTranslate, + style::TextTranslateAnchor, + style::TextColor>>; + +using SymbolSDFTextHaloProgram = SymbolProgram< + shaders::symbol_sdf, + gl::Triangle, + SymbolLayoutAttributes, + SymbolSDFUniforms, + style::Properties< + style::TextOpacity, + style::TextTranslate, + style::TextTranslateAnchor, + style::TextHaloColor, + style::TextHaloWidth, + style::TextHaloBlur>>; using SymbolLayoutVertex = SymbolLayoutAttributes::Vertex; using SymbolIconAttributes = SymbolIconProgram::Attributes; -using SymbolTextAttributes = SymbolSDFTextProgram::Attributes; +//using SymbolTextAttributes = SymbolSDFTextProgram::Attributes; } // namespace mbgl diff --git a/src/mbgl/renderer/buckets/symbol_bucket.hpp b/src/mbgl/renderer/buckets/symbol_bucket.hpp index 652f2ea8e3..3f6149dfc9 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.hpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp @@ -18,7 +18,9 @@ namespace mbgl { class SymbolBucket : public Bucket { public: SymbolBucket(style::SymbolLayoutProperties::PossiblyEvaluated, - const std::map<std::string, std::pair<style::IconPaintProperties::PossiblyEvaluated, style::TextPaintProperties::PossiblyEvaluated>>&, + const std::map<std::string, std::pair< + style::IconPaintProperties::PossiblyEvaluated, + style::TextPaintProperties::PossiblyEvaluated>>&, const style::DataDrivenPropertyValue<float>& textSize, const style::DataDrivenPropertyValue<float>& iconSize, float zoom, @@ -37,8 +39,8 @@ public: const bool iconsNeedLinear; std::map<std::string, std::pair< - SymbolIconProgram::PaintPropertyBinders, - SymbolSDFTextProgram::PaintPropertyBinders>> paintPropertyBinders; + style::IconPaintProperties::Binders, + style::TextPaintProperties::Binders>> paintPropertyBinders; std::unique_ptr<SymbolSizeBinder> textSizeBinder; diff --git a/src/mbgl/renderer/paint_property_binder.hpp b/src/mbgl/renderer/paint_property_binder.hpp index 14934fb6bd..a3dc2e1372 100644 --- a/src/mbgl/renderer/paint_property_binder.hpp +++ b/src/mbgl/renderer/paint_property_binder.hpp @@ -296,26 +296,36 @@ public: template <class P> using Attribute = ZoomInterpolatedAttribute<typename P::Attribute>; - using Attributes = gl::Attributes<Attribute<Ps>...>; using AttributeBindings = typename Attributes::Bindings; + template <class P, class EvaluatedProperties> + auto attributeBinding(const EvaluatedProperties& currentProperties) const { + return binders.template get<P>()->attributeBinding(currentProperties.template get<P>()); + } + template <class EvaluatedProperties> AttributeBindings attributeBindings(const EvaluatedProperties& currentProperties) const { return AttributeBindings { - binders.template get<Ps>()->attributeBinding(currentProperties.template get<Ps>())... + attributeBinding<Ps>(currentProperties)... }; } - using Uniforms = gl::Uniforms<InterpolationUniform<typename Ps::Attribute>...>; + template <class P> + using Uniform = InterpolationUniform<typename P::Attribute>; + using Uniforms = gl::Uniforms<Uniform<Ps>...>; using UniformValues = typename Uniforms::Values; + template <class P> + auto uniformValue(float currentZoom) const { + return typename Uniform<P>::Value { + binders.template get<P>()->interpolationFactor(currentZoom) + }; + } + UniformValues uniformValues(float currentZoom) const { - (void)currentZoom; // Workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56958 return UniformValues { - typename InterpolationUniform<typename Ps::Attribute>::Value { - binders.template get<Ps>()->interpolationFactor(currentZoom) - }... + uniformValue<Ps>(currentZoom)... }; } diff --git a/src/mbgl/renderer/painters/painter_symbol.cpp b/src/mbgl/renderer/painters/painter_symbol.cpp index 2dfc615125..3286b79294 100644 --- a/src/mbgl/renderer/painters/painter_symbol.cpp +++ b/src/mbgl/renderer/painters/painter_symbol.cpp @@ -75,8 +75,8 @@ void Painter::renderSymbol(PaintParameters& parameters, if (bucket.sdfIcons) { if (values.hasHalo) { - draw(parameters.programs.symbolIconSDF, - SymbolSDFIconProgram::uniformValues(false, values, texsize, pixelsToGLUnits, tile, state, SymbolSDFPart::Halo), + draw(parameters.programs.symbolSDFIconHalo, + symbolSDFUniformValues(false, values, texsize, pixelsToGLUnits, tile, state, SymbolSDFPart::Halo), bucket.icon, bucket.iconSizeBinder, values, @@ -85,8 +85,8 @@ void Painter::renderSymbol(PaintParameters& parameters, } if (values.hasFill) { - draw(parameters.programs.symbolIconSDF, - SymbolSDFIconProgram::uniformValues(false, values, texsize, pixelsToGLUnits, tile, state, SymbolSDFPart::Fill), + draw(parameters.programs.symbolSDFIconFill, + symbolSDFUniformValues(false, values, texsize, pixelsToGLUnits, tile, state, SymbolSDFPart::Fill), bucket.icon, bucket.iconSizeBinder, values, @@ -113,8 +113,8 @@ void Painter::renderSymbol(PaintParameters& parameters, const Size texsize = glyphAtlas->getSize(); if (values.hasHalo) { - draw(parameters.programs.symbolGlyph, - SymbolSDFTextProgram::uniformValues(true, values, texsize, pixelsToGLUnits, tile, state, SymbolSDFPart::Halo), + draw(parameters.programs.symbolSDFTextHalo, + symbolSDFUniformValues(true, values, texsize, pixelsToGLUnits, tile, state, SymbolSDFPart::Halo), bucket.text, bucket.textSizeBinder, values, @@ -123,8 +123,8 @@ void Painter::renderSymbol(PaintParameters& parameters, } if (values.hasFill) { - draw(parameters.programs.symbolGlyph, - SymbolSDFTextProgram::uniformValues(true, values, texsize, pixelsToGLUnits, tile, state, SymbolSDFPart::Fill), + draw(parameters.programs.symbolSDFTextFill, + symbolSDFUniformValues(true, values, texsize, pixelsToGLUnits, tile, state, SymbolSDFPart::Fill), bucket.text, bucket.textSizeBinder, values, diff --git a/src/mbgl/style/layers/symbol_layer_properties.hpp b/src/mbgl/style/layers/symbol_layer_properties.hpp index d484d699d7..77deb8b85c 100644 --- a/src/mbgl/style/layers/symbol_layer_properties.hpp +++ b/src/mbgl/style/layers/symbol_layer_properties.hpp @@ -185,11 +185,11 @@ struct IconOpacity : DataDrivenPaintProperty<float, attributes::a_opacity> { static float defaultValue() { return 1; } }; -struct IconColor : DataDrivenPaintProperty<Color, attributes::a_fill_color> { +struct IconColor : DataDrivenPaintProperty<Color, attributes::a_color> { static Color defaultValue() { return Color::black(); } }; -struct IconHaloColor : DataDrivenPaintProperty<Color, attributes::a_halo_color> { +struct IconHaloColor : DataDrivenPaintProperty<Color, attributes::a_color> { static Color defaultValue() { return {}; } }; @@ -213,11 +213,11 @@ struct TextOpacity : DataDrivenPaintProperty<float, attributes::a_opacity> { static float defaultValue() { return 1; } }; -struct TextColor : DataDrivenPaintProperty<Color, attributes::a_fill_color> { +struct TextColor : DataDrivenPaintProperty<Color, attributes::a_color> { static Color defaultValue() { return Color::black(); } }; -struct TextHaloColor : DataDrivenPaintProperty<Color, attributes::a_halo_color> { +struct TextHaloColor : DataDrivenPaintProperty<Color, attributes::a_color> { static Color defaultValue() { return {}; } }; |