1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#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<void(int, vector<ArrowBorders> const &)>;
RouteRenderer();
void UpdateRoute(ScreenBase const & screen, TCacheRouteArrowsCallback const & callback);
void RenderRoute(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
void RenderRouteSigns(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
void SetRouteData(drape_ptr<RouteData> && routeData, ref_ptr<dp::GpuProgramManager> mng);
drape_ptr<RouteData> const & GetRouteData() const;
void SetRouteSign(drape_ptr<RouteSignData> && routeSignData, ref_ptr<dp::GpuProgramManager> mng);
drape_ptr<RouteSignData> const & GetStartPoint() const;
drape_ptr<RouteSignData> const & GetFinishPoint() const;
void SetRouteArrows(drape_ptr<RouteArrowsData> && routeArrowsData, ref_ptr<dp::GpuProgramManager> mng);
void Clear();
void ClearGLDependentResources();
void UpdateDistanceFromBegin(double distanceFromBegin);
private:
void InterpolateByZoom(ScreenBase const & screen, float & halfWidth, float & alpha, double & zoom) const;
void RenderRouteSign(drape_ptr<RouteSignData> const & sign, ScreenBase const & screen,
ref_ptr<dp::GpuProgramManager> mng, dp::UniformValuesStorage const & commonUniforms);
double m_distanceFromBegin;
drape_ptr<RouteData> m_routeData;
vector<ArrowBorders> m_arrowBorders;
drape_ptr<RouteArrowsData> m_routeArrows;
drape_ptr<RouteSignData> m_startRouteSign;
drape_ptr<RouteSignData> m_finishRouteSign;
float m_currentHalfWidth = 0.0f;
float m_currentAlpha = 0.0f;
};
} // namespace df
|