diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2015-10-01 18:17:31 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2015-10-02 15:05:19 +0200 |
commit | 3d834b5c40f28cd8fd19fb285435c5cfafd32af4 (patch) | |
tree | eecbc4979a36188909f67802c3753824b411ac7f /src/mbgl | |
parent | 6a78a4763d46fe5f0bde4ca72446fd4ccb0ea4bc (diff) | |
download | qtlocation-mapboxgl-3d834b5c40f28cd8fd19fb285435c5cfafd32af4.tar.gz |
give every bucket its own set of buffers
This allows changing individual buckets without having leftover data
Diffstat (limited to 'src/mbgl')
-rw-r--r-- | src/mbgl/map/tile_worker.cpp | 10 | ||||
-rw-r--r-- | src/mbgl/map/tile_worker.hpp | 11 | ||||
-rw-r--r-- | src/mbgl/renderer/circle_bucket.cpp | 11 | ||||
-rw-r--r-- | src/mbgl/renderer/circle_bucket.hpp | 9 | ||||
-rw-r--r-- | src/mbgl/renderer/fill_bucket.cpp | 24 | ||||
-rw-r--r-- | src/mbgl/renderer/fill_bucket.hpp | 16 | ||||
-rw-r--r-- | src/mbgl/renderer/line_bucket.cpp | 20 | ||||
-rw-r--r-- | src/mbgl/renderer/line_bucket.hpp | 9 |
8 files changed, 33 insertions, 77 deletions
diff --git a/src/mbgl/map/tile_worker.cpp b/src/mbgl/map/tile_worker.cpp index 06de585a3c..bbbfec1da6 100644 --- a/src/mbgl/map/tile_worker.cpp +++ b/src/mbgl/map/tile_worker.cpp @@ -186,17 +186,14 @@ void TileWorker::addBucketGeometries(Bucket& bucket, const GeometryTileLayer& la std::unique_ptr<Bucket> TileWorker::createFillBucket(const GeometryTileLayer& layer, const StyleBucket& bucket_desc) { - auto bucket = std::make_unique<FillBucket>(fillVertexBuffer, - triangleElementsBuffer, - lineElementsBuffer); + auto bucket = std::make_unique<FillBucket>(); addBucketGeometries(bucket, layer, bucket_desc.filter); return bucket->hasData() ? std::move(bucket) : nullptr; } std::unique_ptr<Bucket> TileWorker::createLineBucket(const GeometryTileLayer& layer, const StyleBucket& bucket_desc) { - auto bucket = std::make_unique<LineBucket>(lineVertexBuffer, - triangleElementsBuffer); + auto bucket = std::make_unique<LineBucket>(); const float z = id.z; auto& layout = bucket->layout; @@ -212,8 +209,7 @@ std::unique_ptr<Bucket> TileWorker::createLineBucket(const GeometryTileLayer& la std::unique_ptr<Bucket> TileWorker::createCircleBucket(const GeometryTileLayer& layer, const StyleBucket& bucket_desc) { - auto bucket = std::make_unique<CircleBucket>(circleVertexBuffer, - triangleElementsBuffer); + auto bucket = std::make_unique<CircleBucket>(); // Circle does not have layout properties to apply. diff --git a/src/mbgl/map/tile_worker.hpp b/src/mbgl/map/tile_worker.hpp index b045ae0f6e..6f5a9d5126 100644 --- a/src/mbgl/map/tile_worker.hpp +++ b/src/mbgl/map/tile_worker.hpp @@ -4,10 +4,6 @@ #include <mapbox/variant.hpp> #include <mbgl/map/tile_data.hpp> -#include <mbgl/geometry/elements_buffer.hpp> -#include <mbgl/geometry/fill_buffer.hpp> -#include <mbgl/geometry/line_buffer.hpp> -#include <mbgl/geometry/circle_buffer.hpp> #include <mbgl/util/noncopyable.hpp> #include <mbgl/util/ptr.hpp> #include <mbgl/style/filter_expression.hpp> @@ -69,13 +65,6 @@ private: bool partialParse = false; - FillVertexBuffer fillVertexBuffer; - LineVertexBuffer lineVertexBuffer; - CircleVertexBuffer circleVertexBuffer; - - TriangleElementsBuffer triangleElementsBuffer; - LineElementsBuffer lineElementsBuffer; - std::unique_ptr<CollisionTile> collisionTile; // Contains all the Bucket objects for the tile. Buckets are render diff --git a/src/mbgl/renderer/circle_bucket.cpp b/src/mbgl/renderer/circle_bucket.cpp index ae8eeef9dc..a9433eecbc 100644 --- a/src/mbgl/renderer/circle_bucket.cpp +++ b/src/mbgl/renderer/circle_bucket.cpp @@ -5,12 +5,7 @@ using namespace mbgl; -CircleBucket::CircleBucket(CircleVertexBuffer& vertexBuffer, - TriangleElementsBuffer& elementsBuffer) - : vertexBuffer_(vertexBuffer) - , elementsBuffer_(elementsBuffer) - , vertexStart_(vertexBuffer_.index()) - , elementsStart_(elementsBuffer_.index()) { +CircleBucket::CircleBucket() { } CircleBucket::~CircleBucket() { @@ -78,8 +73,8 @@ void CircleBucket::addGeometry(const GeometryCollection& geometryCollection) { } void CircleBucket::drawCircles(CircleShader& shader) { - GLbyte *vertexIndex = BUFFER_OFFSET(vertexStart_ * vertexBuffer_.itemSize); - GLbyte *elementsIndex = BUFFER_OFFSET(elementsStart_ * elementsBuffer_.itemSize); + GLbyte* vertexIndex = BUFFER_OFFSET(0); + GLbyte* elementsIndex = BUFFER_OFFSET(0); for (auto& group : triangleGroups_) { assert(group); diff --git a/src/mbgl/renderer/circle_bucket.hpp b/src/mbgl/renderer/circle_bucket.hpp index d25cbdad3b..d7908cf02e 100644 --- a/src/mbgl/renderer/circle_bucket.hpp +++ b/src/mbgl/renderer/circle_bucket.hpp @@ -20,7 +20,7 @@ class CircleBucket : public Bucket { using TriangleGroup = ElementGroup<3>; public: - CircleBucket(CircleVertexBuffer &vertexBuffer, TriangleElementsBuffer &elementsBuffer); + CircleBucket(); ~CircleBucket() override; void upload() override; @@ -32,11 +32,8 @@ public: void drawCircles(CircleShader& shader); private: - CircleVertexBuffer& vertexBuffer_; - TriangleElementsBuffer& elementsBuffer_; - - const GLsizei vertexStart_; - const GLsizei elementsStart_; + CircleVertexBuffer vertexBuffer_; + TriangleElementsBuffer elementsBuffer_; std::vector<std::unique_ptr<TriangleGroup>> triangleGroups_; }; diff --git a/src/mbgl/renderer/fill_bucket.cpp b/src/mbgl/renderer/fill_bucket.cpp index 38263b3a47..0fbb02e7c1 100644 --- a/src/mbgl/renderer/fill_bucket.cpp +++ b/src/mbgl/renderer/fill_bucket.cpp @@ -28,9 +28,7 @@ void FillBucket::free(void *, void *ptr) { ::free(ptr); } -FillBucket::FillBucket(FillVertexBuffer &vertexBuffer_, - TriangleElementsBuffer &triangleElementsBuffer_, - LineElementsBuffer &lineElementsBuffer_) +FillBucket::FillBucket() : allocator(new TESSalloc{ &alloc, &realloc, @@ -43,13 +41,7 @@ FillBucket::FillBucket(FillVertexBuffer &vertexBuffer_, 8, // regionBucketSize 128, // extraVertices allocated for the priority queue. }), - tesselator(tessNewTess(allocator)), - vertexBuffer(vertexBuffer_), - triangleElementsBuffer(triangleElementsBuffer_), - lineElementsBuffer(lineElementsBuffer_), - vertex_start(vertexBuffer_.index()), - triangle_elements_start(triangleElementsBuffer_.index()), - line_elements_start(lineElementsBuffer.index()) { + tesselator(tessNewTess(allocator)) { assert(tesselator); } @@ -216,8 +208,8 @@ bool FillBucket::hasData() const { } void FillBucket::drawElements(PlainShader& shader) { - GLbyte *vertex_index = BUFFER_OFFSET(vertex_start * vertexBuffer.itemSize); - GLbyte *elements_index = BUFFER_OFFSET(triangle_elements_start * triangleElementsBuffer.itemSize); + GLbyte* vertex_index = BUFFER_OFFSET(0); + GLbyte* elements_index = BUFFER_OFFSET(0); for (auto& group : triangleGroups) { assert(group); group->array[0].bind(shader, vertexBuffer, triangleElementsBuffer, vertex_index); @@ -228,8 +220,8 @@ void FillBucket::drawElements(PlainShader& shader) { } void FillBucket::drawElements(PatternShader& shader) { - GLbyte *vertex_index = BUFFER_OFFSET(vertex_start * vertexBuffer.itemSize); - GLbyte *elements_index = BUFFER_OFFSET(triangle_elements_start * triangleElementsBuffer.itemSize); + GLbyte* vertex_index = BUFFER_OFFSET(0); + GLbyte* elements_index = BUFFER_OFFSET(0); for (auto& group : triangleGroups) { assert(group); group->array[1].bind(shader, vertexBuffer, triangleElementsBuffer, vertex_index); @@ -240,8 +232,8 @@ void FillBucket::drawElements(PatternShader& shader) { } void FillBucket::drawVertices(OutlineShader& shader) { - GLbyte *vertex_index = BUFFER_OFFSET(vertex_start * vertexBuffer.itemSize); - GLbyte *elements_index = BUFFER_OFFSET(line_elements_start * lineElementsBuffer.itemSize); + GLbyte* vertex_index = BUFFER_OFFSET(0); + GLbyte* elements_index = BUFFER_OFFSET(0); for (auto& group : lineGroups) { assert(group); group->array[0].bind(shader, vertexBuffer, lineElementsBuffer, vertex_index); diff --git a/src/mbgl/renderer/fill_bucket.hpp b/src/mbgl/renderer/fill_bucket.hpp index 1e02852544..10ee65fd01 100644 --- a/src/mbgl/renderer/fill_bucket.hpp +++ b/src/mbgl/renderer/fill_bucket.hpp @@ -4,6 +4,7 @@ #include <mbgl/renderer/bucket.hpp> #include <mbgl/map/geometry_tile.hpp> #include <mbgl/geometry/elements_buffer.hpp> +#include <mbgl/geometry/fill_buffer.hpp> #include <clipper/clipper.hpp> #include <libtess2/tesselator.h> @@ -28,9 +29,7 @@ class FillBucket : public Bucket { typedef ElementGroup<1> LineGroup; public: - FillBucket(FillVertexBuffer &vertexBuffer, - TriangleElementsBuffer &triangleElementsBuffer, - LineElementsBuffer &lineElementsBuffer); + FillBucket(); ~FillBucket() override; void upload() override; @@ -49,14 +48,9 @@ private: TESStesselator *tesselator; ClipperLib::Clipper clipper; - FillVertexBuffer& vertexBuffer; - TriangleElementsBuffer& triangleElementsBuffer; - LineElementsBuffer& lineElementsBuffer; - - // hold information on where the vertices are located in the FillBuffer - const GLsizei vertex_start; - const GLsizei triangle_elements_start; - const GLsizei line_elements_start; + FillVertexBuffer vertexBuffer; + TriangleElementsBuffer triangleElementsBuffer; + LineElementsBuffer lineElementsBuffer; std::vector<std::unique_ptr<TriangleGroup>> triangleGroups; std::vector<std::unique_ptr<LineGroup>> lineGroups; diff --git a/src/mbgl/renderer/line_bucket.cpp b/src/mbgl/renderer/line_bucket.cpp index 9f4d060fce..8824b6fed9 100644 --- a/src/mbgl/renderer/line_bucket.cpp +++ b/src/mbgl/renderer/line_bucket.cpp @@ -14,12 +14,8 @@ using namespace mbgl; -LineBucket::LineBucket(LineVertexBuffer& vertexBuffer_, - TriangleElementsBuffer& triangleElementsBuffer_) - : vertexBuffer(vertexBuffer_), - triangleElementsBuffer(triangleElementsBuffer_), - vertex_start(vertexBuffer_.index()), - triangle_elements_start(triangleElementsBuffer_.index()){}; +LineBucket::LineBucket() { +} LineBucket::~LineBucket() { // Do not remove. header file only contains forward definitions to unique pointers. @@ -403,8 +399,8 @@ bool LineBucket::hasData() const { } void LineBucket::drawLines(LineShader& shader) { - GLbyte* vertex_index = BUFFER_OFFSET(vertex_start * vertexBuffer.itemSize); - GLbyte* elements_index = BUFFER_OFFSET(triangle_elements_start * triangleElementsBuffer.itemSize); + GLbyte* vertex_index = BUFFER_OFFSET(0); + GLbyte* elements_index = BUFFER_OFFSET(0); for (auto& group : triangleGroups) { assert(group); if (!group->elements_length) { @@ -419,8 +415,8 @@ void LineBucket::drawLines(LineShader& shader) { } void LineBucket::drawLineSDF(LineSDFShader& shader) { - GLbyte* vertex_index = BUFFER_OFFSET(vertex_start * vertexBuffer.itemSize); - GLbyte* elements_index = BUFFER_OFFSET(triangle_elements_start * triangleElementsBuffer.itemSize); + GLbyte* vertex_index = BUFFER_OFFSET(0); + GLbyte* elements_index = BUFFER_OFFSET(0); for (auto& group : triangleGroups) { assert(group); if (!group->elements_length) { @@ -435,8 +431,8 @@ void LineBucket::drawLineSDF(LineSDFShader& shader) { } void LineBucket::drawLinePatterns(LinepatternShader& shader) { - GLbyte* vertex_index = BUFFER_OFFSET(vertex_start * vertexBuffer.itemSize); - GLbyte* elements_index = BUFFER_OFFSET(triangle_elements_start * triangleElementsBuffer.itemSize); + GLbyte* vertex_index = BUFFER_OFFSET(0); + GLbyte* elements_index = BUFFER_OFFSET(0); for (auto& group : triangleGroups) { assert(group); if (!group->elements_length) { diff --git a/src/mbgl/renderer/line_bucket.hpp b/src/mbgl/renderer/line_bucket.hpp index 2be0cf3924..ce93cb76f9 100644 --- a/src/mbgl/renderer/line_bucket.hpp +++ b/src/mbgl/renderer/line_bucket.hpp @@ -25,7 +25,7 @@ class LineBucket : public Bucket { using TriangleGroup = ElementGroup<3>; public: - LineBucket(LineVertexBuffer &vertexBuffer, TriangleElementsBuffer &triangleElementsBuffer); + LineBucket(); ~LineBucket() override; void upload() override; @@ -55,11 +55,8 @@ public: StyleLayoutLine layout; private: - LineVertexBuffer& vertexBuffer; - TriangleElementsBuffer& triangleElementsBuffer; - - const GLsizei vertex_start; - const GLsizei triangle_elements_start; + LineVertexBuffer vertexBuffer; + TriangleElementsBuffer triangleElementsBuffer; GLint e1; GLint e2; |