blob: b9c67005ce8a8a5a676f18ecd8bf42d548d89fb0 (
plain)
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
|
#pragma once
#include "drape_frontend/gps_track_point.hpp"
#include "drape_frontend/gps_track_shape.hpp"
#include "drape/gpu_program_manager.hpp"
#include "drape/pointers.hpp"
#include "drape/uniform_values_storage.hpp"
#include "geometry/screenbase.hpp"
#include "geometry/spline.hpp"
#include "std/map.hpp"
#include "std/vector.hpp"
namespace df
{
class GpsTrackRenderer final
{
public:
using TRenderDataRequestFn = function<void(size_t)>;
explicit GpsTrackRenderer(TRenderDataRequestFn const & dataRequestFn);
void AddRenderData(ref_ptr<dp::GpuProgramManager> mng,
drape_ptr<GpsTrackRenderData> && renderData);
void UpdatePoints(vector<GpsTrackPoint> const & toAdd,
vector<uint32_t> const & toRemove);
void RenderTrack(ScreenBase const & screen, int zoomLevel,
ref_ptr<dp::GpuProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
void Update();
void Clear();
void ClearRenderData();
private:
float CalculateRadius(ScreenBase const & screen) const;
size_t GetAvailablePointsCount() const;
dp::Color CalculatePointColor(size_t pointIndex, m2::PointD const & curPoint,
double lengthFromStart, double fullLength) const;
dp::Color GetColorBySpeed(double speed) const;
TRenderDataRequestFn m_dataRequestFn;
vector<drape_ptr<GpsTrackRenderData>> m_renderData;
vector<GpsTrackPoint> m_points;
m2::Spline m_pointsSpline;
bool m_needUpdate;
bool m_waitForRenderData;
vector<pair<GpsTrackHandle*, size_t>> m_handlesCache;
float m_radius;
m2::PointD m_pivot;
};
} // namespace df
|