summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2016-10-29 18:59:07 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2016-10-31 16:53:07 +0200
commit384f1a1960c9a21039642afe9bd1df58a93fddfc (patch)
treecd4a383d82ee78a8bb38f87703a19b61171c5f1d /src/mbgl/renderer
parent38f536049a8ed8f4bdf7706f4afcbbaf06c974c9 (diff)
downloadqtlocation-mapboxgl-384f1a1960c9a21039642afe9bd1df58a93fddfc.tar.gz
[core] Use numeric_limits<>::max() for checking element groups
Diffstat (limited to 'src/mbgl/renderer')
-rw-r--r--src/mbgl/renderer/circle_bucket.cpp17
-rw-r--r--src/mbgl/renderer/circle_bucket.hpp2
-rw-r--r--src/mbgl/renderer/fill_bucket.cpp20
-rw-r--r--src/mbgl/renderer/fill_bucket.hpp4
-rw-r--r--src/mbgl/renderer/line_bucket.cpp8
-rw-r--r--src/mbgl/renderer/line_bucket.hpp2
-rw-r--r--src/mbgl/renderer/symbol_bucket.hpp4
7 files changed, 28 insertions, 29 deletions
diff --git a/src/mbgl/renderer/circle_bucket.cpp b/src/mbgl/renderer/circle_bucket.cpp
index cb6ba7d458..9c1c5a6b44 100644
--- a/src/mbgl/renderer/circle_bucket.cpp
+++ b/src/mbgl/renderer/circle_bucket.cpp
@@ -31,6 +31,8 @@ bool CircleBucket::hasData() const {
}
void CircleBucket::addGeometry(const GeometryCollection& geometryCollection) {
+ constexpr const uint16_t vertexLength = 4;
+
for (auto& circle : geometryCollection) {
for(auto & geometry : circle) {
auto x = geometry.x;
@@ -42,7 +44,7 @@ void CircleBucket::addGeometry(const GeometryCollection& geometryCollection) {
if ((mode != MapMode::Still) &&
(x < 0 || x >= util::EXTENT || y < 0 || y >= util::EXTENT)) continue;
- if (!segments.size() || segments.back().vertexLength + 4 > 65535) {
+ if (segments.back().vertexLength + vertexLength > std::numeric_limits<uint16_t>::max()) {
// Move to a new segments because the old one can't hold the geometry.
segments.emplace_back(vertices.size(), triangles.size());
}
@@ -62,18 +64,15 @@ void CircleBucket::addGeometry(const GeometryCollection& geometryCollection) {
vertices.emplace_back(x, y, -1, 1); // 4
auto& segment = segments.back();
+ assert(segment.vertexLength <= std::numeric_limits<uint16_t>::max());
uint16_t index = segment.vertexLength;
// 1, 2, 3
// 1, 4, 3
- triangles.emplace_back(index,
- static_cast<uint16_t>(index + 1),
- static_cast<uint16_t>(index + 2));
- triangles.emplace_back(index,
- static_cast<uint16_t>(index + 3),
- static_cast<uint16_t>(index + 2));
-
- segment.vertexLength += 4;
+ triangles.emplace_back(index, index + 1, index + 2);
+ triangles.emplace_back(index, index + 3, index + 2);
+
+ segment.vertexLength += vertexLength;
segment.primitiveLength += 2;
}
}
diff --git a/src/mbgl/renderer/circle_bucket.hpp b/src/mbgl/renderer/circle_bucket.hpp
index a682d423d6..494e64cc0f 100644
--- a/src/mbgl/renderer/circle_bucket.hpp
+++ b/src/mbgl/renderer/circle_bucket.hpp
@@ -22,7 +22,7 @@ public:
std::vector<CircleVertex> vertices;
std::vector<gl::Triangle> triangles;
- std::vector<gl::Segment> segments;
+ std::vector<gl::Segment> segments { { 0, 0 } };
optional<gl::VertexBuffer<CircleVertex>> vertexBuffer;
optional<gl::IndexBuffer<gl::Triangle>> indexBuffer;
diff --git a/src/mbgl/renderer/fill_bucket.cpp b/src/mbgl/renderer/fill_bucket.cpp
index 2c69524c0d..86b3946f64 100644
--- a/src/mbgl/renderer/fill_bucket.cpp
+++ b/src/mbgl/renderer/fill_bucket.cpp
@@ -39,7 +39,7 @@ void FillBucket::addGeometry(const GeometryCollection& geometry) {
for (const auto& ring : polygon) {
totalVertices += ring.size();
- if (totalVertices > 65535)
+ if (totalVertices > std::numeric_limits<uint16_t>::max())
throw GeometryTooLongException();
}
@@ -51,21 +51,20 @@ void FillBucket::addGeometry(const GeometryCollection& geometry) {
if (nVertices == 0)
continue;
- if (lineSegments.empty() || lineSegments.back().vertexLength + nVertices > 65535) {
+ if (lineSegments.back().vertexLength + nVertices > std::numeric_limits<uint16_t>::max()) {
lineSegments.emplace_back(vertices.size(), lines.size());
}
auto& lineSegment = lineSegments.back();
+ assert(lineSegment.vertexLength <= std::numeric_limits<uint16_t>::max());
uint16_t lineIndex = lineSegment.vertexLength;
vertices.emplace_back(ring[0].x, ring[0].y);
- lines.emplace_back(static_cast<uint16_t>(lineIndex + nVertices - 1),
- static_cast<uint16_t>(lineIndex));
+ lines.emplace_back(lineIndex + nVertices - 1, lineIndex);
for (uint32_t i = 1; i < nVertices; i++) {
vertices.emplace_back(ring[i].x, ring[i].y);
- lines.emplace_back(static_cast<uint16_t>(lineIndex + i - 1),
- static_cast<uint16_t>(lineIndex + i));
+ lines.emplace_back(lineIndex + i - 1, lineIndex + i);
}
lineSegment.vertexLength += nVertices;
@@ -77,17 +76,18 @@ void FillBucket::addGeometry(const GeometryCollection& geometry) {
std::size_t nIndicies = indices.size();
assert(nIndicies % 3 == 0);
- if (triangleSegments.empty() || triangleSegments.back().vertexLength + totalVertices > 65535) {
+ if (triangleSegments.back().vertexLength + totalVertices > std::numeric_limits<uint16_t>::max()) {
triangleSegments.emplace_back(startVertices, triangles.size());
}
auto& triangleSegment = triangleSegments.back();
+ assert(triangleSegment.vertexLength <= std::numeric_limits<uint16_t>::max());
uint16_t triangleIndex = triangleSegment.vertexLength;
for (uint32_t i = 0; i < nIndicies; i += 3) {
- triangles.emplace_back(static_cast<uint16_t>(triangleIndex + indices[i]),
- static_cast<uint16_t>(triangleIndex + indices[i + 1]),
- static_cast<uint16_t>(triangleIndex + indices[i + 2]));
+ triangles.emplace_back(triangleIndex + indices[i],
+ triangleIndex + indices[i + 1],
+ triangleIndex + indices[i + 2]);
}
triangleSegment.vertexLength += totalVertices;
diff --git a/src/mbgl/renderer/fill_bucket.hpp b/src/mbgl/renderer/fill_bucket.hpp
index 715b8e2745..58fa916f82 100644
--- a/src/mbgl/renderer/fill_bucket.hpp
+++ b/src/mbgl/renderer/fill_bucket.hpp
@@ -22,8 +22,8 @@ public:
std::vector<FillVertex> vertices;
std::vector<gl::Line> lines;
std::vector<gl::Triangle> triangles;
- std::vector<gl::Segment> lineSegments;
- std::vector<gl::Segment> triangleSegments;
+ std::vector<gl::Segment> lineSegments { { 0, 0 } };
+ std::vector<gl::Segment> triangleSegments { { 0, 0 } };
optional<gl::VertexBuffer<FillVertex>> vertexBuffer;
optional<gl::IndexBuffer<gl::Line>> lineIndexBuffer;
diff --git a/src/mbgl/renderer/line_bucket.cpp b/src/mbgl/renderer/line_bucket.cpp
index 229b14d489..0298e174a1 100644
--- a/src/mbgl/renderer/line_bucket.cpp
+++ b/src/mbgl/renderer/line_bucket.cpp
@@ -348,17 +348,17 @@ void LineBucket::addGeometry(const GeometryCoordinates& coordinates) {
const std::size_t endVertex = vertices.size();
const std::size_t vertexCount = endVertex - startVertex;
- if (segments.empty() || segments.back().vertexLength + vertexCount > 65535) {
+ if (segments.back().vertexLength + vertexCount > std::numeric_limits<uint16_t>::max()) {
+ // Move to a new group because the old one can't hold the geometry.
segments.emplace_back(startVertex, triangles.size());
}
auto& segment = segments.back();
+ assert(segment.vertexLength <= std::numeric_limits<uint16_t>::max());
uint16_t index = segment.vertexLength;
for (const auto& triangle : triangleStore) {
- triangles.emplace_back(static_cast<uint16_t>(index + triangle.a),
- static_cast<uint16_t>(index + triangle.b),
- static_cast<uint16_t>(index + triangle.c));
+ triangles.emplace_back(index + triangle.a, index + triangle.b, index + triangle.c);
}
segment.vertexLength += vertexCount;
diff --git a/src/mbgl/renderer/line_bucket.hpp b/src/mbgl/renderer/line_bucket.hpp
index 7b4c5f1b57..3ee142a70b 100644
--- a/src/mbgl/renderer/line_bucket.hpp
+++ b/src/mbgl/renderer/line_bucket.hpp
@@ -28,7 +28,7 @@ public:
std::vector<LineVertex> vertices;
std::vector<gl::Triangle> triangles;
- std::vector<gl::Segment> segments;
+ std::vector<gl::Segment> segments { { 0, 0 } };
optional<gl::VertexBuffer<LineVertex>> vertexBuffer;
optional<gl::IndexBuffer<gl::Triangle>> indexBuffer;
diff --git a/src/mbgl/renderer/symbol_bucket.hpp b/src/mbgl/renderer/symbol_bucket.hpp
index a905e25363..881475e4a9 100644
--- a/src/mbgl/renderer/symbol_bucket.hpp
+++ b/src/mbgl/renderer/symbol_bucket.hpp
@@ -36,7 +36,7 @@ public:
struct TextBuffer {
std::vector<SymbolVertex> vertices;
std::vector<gl::Triangle> triangles;
- std::vector<gl::Segment> segments;
+ std::vector<gl::Segment> segments { { 0, 0 } };
optional<gl::VertexBuffer<SymbolVertex>> vertexBuffer;
optional<gl::IndexBuffer<gl::Triangle>> indexBuffer;
@@ -45,7 +45,7 @@ public:
struct IconBuffer {
std::vector<SymbolVertex> vertices;
std::vector<gl::Triangle> triangles;
- std::vector<gl::Segment> segments;
+ std::vector<gl::Segment> segments { { 0, 0 } };
optional<gl::VertexBuffer<SymbolVertex>> vertexBuffer;
optional<gl::IndexBuffer<gl::Triangle>> indexBuffer;