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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
#include <mbgl/renderer/debug_bucket.hpp>
#include <mbgl/renderer/painter.hpp>
#include <mbgl/shader/fill_shader.hpp>
#include <mbgl/shader/fill_attributes.hpp>
#include <mbgl/geometry/debug_font_data.hpp>
#include <mbgl/util/string.hpp>
#include <cmath>
#include <string>
#include <vector>
namespace mbgl {
std::vector<FillVertex> buildTextVertices(const OverscaledTileID& id,
const bool renderable,
const bool complete,
optional<Timestamp> modified,
optional<Timestamp> expires,
MapDebugOptions debugMode) {
std::vector<FillVertex> textPoints;
auto addText = [&] (const std::string& text, double left, double baseline, double scale) {
for (uint8_t c : text) {
if (c < 32 || c >= 127)
continue;
optional<Point<int16_t>> prev;
const glyph& glyph = simplex[c - 32];
for (int32_t j = 0; j < glyph.length; j += 2) {
if (glyph.data[j] == -1 && glyph.data[j + 1] == -1) {
prev = {};
} else {
Point<int16_t> p {
int16_t(::round(left + glyph.data[j] * scale)),
int16_t(::round(baseline - glyph.data[j + 1] * scale))
};
if (prev) {
textPoints.emplace_back(FillAttributes::vertex(*prev));
textPoints.emplace_back(FillAttributes::vertex(p));
}
prev = p;
}
}
left += glyph.width * scale;
}
};
double baseline = 200;
if (debugMode & MapDebugOptions::ParseStatus) {
const std::string text = util::toString(id) + " - " +
(complete ? "complete" : renderable ? "renderable" : "pending");
addText(text, 50, baseline, 5);
baseline += 200;
}
if (debugMode & MapDebugOptions::Timestamps && modified && expires) {
const std::string modifiedText = "modified: " + util::iso8601(*modified);
addText(modifiedText, 50, baseline, 5);
const std::string expiresText = "expires: " + util::iso8601(*expires);
addText(expiresText, 50, baseline + 200, 5);
}
return textPoints;
}
DebugBucket::DebugBucket(const OverscaledTileID& id,
const bool renderable_,
const bool complete_,
optional<Timestamp> modified_,
optional<Timestamp> expires_,
MapDebugOptions debugMode_,
gl::Context& context)
: renderable(renderable_),
complete(complete_),
modified(std::move(modified_)),
expires(std::move(expires_)),
debugMode(debugMode_),
vertexBuffer(context.createVertexBuffer(buildTextVertices(id, renderable_, complete_, modified_, expires_, debugMode_))) {
}
} // namespace mbgl
|