#pragma once #include "drape_frontend/route_builder.hpp" #include "drape/gpu_program_manager.hpp" #include "drape/pointers.hpp" #include "geometry/screenbase.hpp" namespace df { class RouteRenderer final { public: using TCacheRouteArrowsCallback = function const &)>; RouteRenderer(); void UpdateRoute(ScreenBase const & screen, TCacheRouteArrowsCallback const & callback); void RenderRoute(ScreenBase const & screen, bool trafficShown, ref_ptr mng, dp::UniformValuesStorage const & commonUniforms); void RenderRouteSigns(ScreenBase const & screen, ref_ptr mng, dp::UniformValuesStorage const & commonUniforms); void SetRouteData(drape_ptr && routeData, ref_ptr mng); drape_ptr const & GetRouteData() const; void SetRouteSign(drape_ptr && routeSignData, ref_ptr mng); drape_ptr const & GetStartPoint() const; drape_ptr const & GetFinishPoint() const; void SetRouteArrows(drape_ptr && routeArrowsData, ref_ptr mng); void Clear(); void ClearGLDependentResources(); void UpdateDistanceFromBegin(double distanceFromBegin); private: void InterpolateByZoom(ScreenBase const & screen, float & halfWidth, double & zoom) const; void RenderRouteSign(drape_ptr const & sign, ScreenBase const & screen, ref_ptr mng, dp::UniformValuesStorage const & commonUniforms); double m_distanceFromBegin; drape_ptr m_routeData; vector m_arrowBorders; drape_ptr m_routeArrows; drape_ptr m_startRouteSign; drape_ptr m_finishRouteSign; float m_currentHalfWidth = 0.0f; }; } // namespace df