summaryrefslogtreecommitdiff
path: root/src/mbgl/style/layers/circle_layer_properties.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/layers/circle_layer_properties.hpp')
-rw-r--r--src/mbgl/style/layers/circle_layer_properties.hpp123
1 files changed, 110 insertions, 13 deletions
diff --git a/src/mbgl/style/layers/circle_layer_properties.hpp b/src/mbgl/style/layers/circle_layer_properties.hpp
index bc0c961e75..e64cb27775 100644
--- a/src/mbgl/style/layers/circle_layer_properties.hpp
+++ b/src/mbgl/style/layers/circle_layer_properties.hpp
@@ -56,19 +56,116 @@ struct CircleStrokeOpacity : DataDrivenPaintProperty<float, attributes::a_stroke
static float defaultValue() { return 1; }
};
-class CirclePaintProperties : public Properties<
- CircleRadius,
- CircleColor,
- CircleBlur,
- CircleOpacity,
- CircleTranslate,
- CircleTranslateAnchor,
- CirclePitchScale,
- CirclePitchAlignment,
- CircleStrokeWidth,
- CircleStrokeColor,
- CircleStrokeOpacity
-> {};
+class CirclePaintProperties {
+public:
+ class PossiblyEvaluated;
+
+ class Binders {
+ public:
+ std::unique_ptr<PaintPropertyBinder<float, typename attributes::a_radius::Type>> circleRadius;
+ std::unique_ptr<PaintPropertyBinder<Color, typename attributes::a_color::Type>> circleColor;
+ std::unique_ptr<PaintPropertyBinder<float, typename attributes::a_blur::Type>> circleBlur;
+ std::unique_ptr<PaintPropertyBinder<float, typename attributes::a_opacity::Type>> circleOpacity;
+ std::unique_ptr<PaintPropertyBinder<float, typename attributes::a_stroke_width::Type>> circleStrokeWidth;
+ std::unique_ptr<PaintPropertyBinder<Color, typename attributes::a_stroke_color::Type>> circleStrokeColor;
+ std::unique_ptr<PaintPropertyBinder<float, typename attributes::a_stroke_opacity::Type>> circleStrokeOpacity;
+
+ void populateVertexVectors(const GeometryTileFeature&, std::size_t length);
+ void upload(gl::Context&);
+
+ using Attributes = gl::Attributes<
+ ZoomInterpolatedAttribute<attributes::a_radius>,
+ ZoomInterpolatedAttribute<attributes::a_color>,
+ ZoomInterpolatedAttribute<attributes::a_blur>,
+ ZoomInterpolatedAttribute<attributes::a_opacity>,
+ ZoomInterpolatedAttribute<attributes::a_stroke_width>,
+ ZoomInterpolatedAttribute<attributes::a_stroke_color>,
+ ZoomInterpolatedAttribute<attributes::a_stroke_opacity>
+ >;
+
+ using Uniforms = gl::Uniforms<
+ InterpolationUniform<attributes::a_radius>,
+ InterpolationUniform<attributes::a_color>,
+ InterpolationUniform<attributes::a_blur>,
+ InterpolationUniform<attributes::a_opacity>,
+ InterpolationUniform<attributes::a_stroke_width>,
+ InterpolationUniform<attributes::a_stroke_color>,
+ InterpolationUniform<attributes::a_stroke_opacity>,
+ uniforms::u_radius,
+ uniforms::u_color,
+ uniforms::u_blur,
+ uniforms::u_opacity,
+ uniforms::u_stroke_width,
+ uniforms::u_stroke_color,
+ uniforms::u_stroke_opacity
+ >;
+
+ using AttributeBindings = typename Attributes::Bindings;
+ using UniformValues = typename Uniforms::Values;
+
+ AttributeBindings attributeBindings(const PossiblyEvaluated&) const;
+ UniformValues uniformValues(float z, const PossiblyEvaluated&) const;
+ };
+
+ class PossiblyEvaluated {
+ public:
+ PossiblyEvaluatedPropertyValue<float> circleRadius;
+ PossiblyEvaluatedPropertyValue<Color> circleColor;
+ PossiblyEvaluatedPropertyValue<float> circleBlur;
+ PossiblyEvaluatedPropertyValue<float> circleOpacity;
+ std::array<float, 2> circleTranslate;
+ TranslateAnchorType circleTranslateAnchor;
+ CirclePitchScaleType circlePitchScale;
+ AlignmentType circlePitchAlignment;
+ PossiblyEvaluatedPropertyValue<float> circleStrokeWidth;
+ PossiblyEvaluatedPropertyValue<Color> circleStrokeColor;
+ PossiblyEvaluatedPropertyValue<float> circleStrokeOpacity;
+
+ Binders createBinders(float z) const;
+
+ std::bitset<8> constants() const;
+ std::vector<std::string> defines() const;
+ };
+
+ class Unevaluated {
+ public:
+ style::Transitioning<PropertyValue<float>> circleRadius;
+ style::Transitioning<PropertyValue<Color>> circleColor;
+ style::Transitioning<PropertyValue<float>> circleBlur;
+ style::Transitioning<PropertyValue<float>> circleOpacity;
+ style::Transitioning<PropertyValue<std::array<float, 2>>> circleTranslate;
+ style::Transitioning<PropertyValue<TranslateAnchorType>> circleTranslateAnchor;
+ style::Transitioning<PropertyValue<CirclePitchScaleType>> circlePitchScale;
+ style::Transitioning<PropertyValue<AlignmentType>> circlePitchAlignment;
+ style::Transitioning<PropertyValue<float>> circleStrokeWidth;
+ style::Transitioning<PropertyValue<Color>> circleStrokeColor;
+ style::Transitioning<PropertyValue<float>> circleStrokeOpacity;
+
+ bool hasTransition() const;
+ PossiblyEvaluated evaluate(const PropertyEvaluationParameters&) const;
+ };
+
+ class Transitionable {
+ public:
+ style::Transitionable<PropertyValue<float>> circleRadius;
+ style::Transitionable<PropertyValue<Color>> circleColor;
+ style::Transitionable<PropertyValue<float>> circleBlur;
+ style::Transitionable<PropertyValue<float>> circleOpacity;
+ style::Transitionable<PropertyValue<std::array<float, 2>>> circleTranslate;
+ style::Transitionable<PropertyValue<TranslateAnchorType>> circleTranslateAnchor;
+ style::Transitionable<PropertyValue<CirclePitchScaleType>> circlePitchScale;
+ style::Transitionable<PropertyValue<AlignmentType>> circlePitchAlignment;
+ style::Transitionable<PropertyValue<float>> circleStrokeWidth;
+ style::Transitionable<PropertyValue<Color>> circleStrokeColor;
+ style::Transitionable<PropertyValue<float>> circleStrokeOpacity;
+
+ Unevaluated transitioned(const TransitionParameters&, Unevaluated&& prior) const;
+ Unevaluated untransitioned() const;
+
+ bool hasDataDrivenPropertyDifference(const Transitionable& other) const;
+ };
+};
+
} // namespace style
} // namespace mbgl