summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2017-07-10 21:42:13 +0200
committerKonstantin Käfer <mail@kkaefer.com>2017-07-11 14:59:04 +0200
commitf3815fdfba99fe1eeff48c3bae0b60d783cb4e96 (patch)
tree3a2ea22316f72a1ed96ac5a5f952b72a29ba31b8
parent47a003b7420b4a1585a647fb71590fbb13813dd5 (diff)
downloadqtlocation-mapboxgl-upstream/kkaefer-drawable.tar.gz
[core] move RasterBucket to Drawableupstream/kkaefer-drawable
-rw-r--r--src/mbgl/renderer/buckets/raster_bucket.cpp21
-rw-r--r--src/mbgl/renderer/buckets/raster_bucket.hpp11
-rw-r--r--src/mbgl/renderer/indexed_primitives.hpp4
-rw-r--r--src/mbgl/renderer/painter.hpp4
-rw-r--r--src/mbgl/renderer/painters/painter_raster.cpp8
-rw-r--r--src/mbgl/renderer/sources/render_image_source.cpp25
6 files changed, 38 insertions, 35 deletions
diff --git a/src/mbgl/renderer/buckets/raster_bucket.cpp b/src/mbgl/renderer/buckets/raster_bucket.cpp
index 49ec0065c3..ea35582196 100644
--- a/src/mbgl/renderer/buckets/raster_bucket.cpp
+++ b/src/mbgl/renderer/buckets/raster_bucket.cpp
@@ -16,34 +16,33 @@ void RasterBucket::upload(gl::Context& context) {
if (!texture) {
texture = context.createTexture(image);
}
- if (!vertices.empty()) {
- vertexBuffer = context.createVertexBuffer(std::move(vertices));
- indexBuffer = context.createIndexBuffer(std::move(indices));
+ if (!primitives.empty()) {
+ drawable.emplace(context, std::move(primitives));
}
uploaded = true;
}
void RasterBucket::clear() {
- vertexBuffer = {};
- indexBuffer = {};
- segments.clear();
- vertices.clear();
- indices.clear();
-
+ primitives = {};
+ drawable = std::experimental::nullopt;
uploaded = false;
}
+
void RasterBucket::render(Painter& painter,
PaintParameters& parameters,
const RenderLayer& layer,
const RenderTile& tile) {
- painter.renderRaster(parameters, *this, *layer.as<RenderRasterLayer>(), tile.matrix, false);
+ painter.renderRaster(parameters, *this, *layer.as<RenderRasterLayer>(), tile.matrix,
+ painter.rasterDrawable);
}
void RasterBucket::render(Painter& painter,
PaintParameters& parameters,
const RenderLayer& layer,
const mat4& matrix) {
- painter.renderRaster(parameters, *this, *layer.as<RenderRasterLayer>(), matrix, true);
+ if (drawable) {
+ painter.renderRaster(parameters, *this, *layer.as<RenderRasterLayer>(), matrix, *drawable);
+ }
}
bool RasterBucket::hasData() const {
diff --git a/src/mbgl/renderer/buckets/raster_bucket.hpp b/src/mbgl/renderer/buckets/raster_bucket.hpp
index b5cf7997d5..286287c0db 100644
--- a/src/mbgl/renderer/buckets/raster_bucket.hpp
+++ b/src/mbgl/renderer/buckets/raster_bucket.hpp
@@ -5,6 +5,8 @@
#include <mbgl/gl/vertex_buffer.hpp>
#include <mbgl/programs/raster_program.hpp>
#include <mbgl/renderer/bucket.hpp>
+#include <mbgl/renderer/indexed_primitives.hpp>
+#include <mbgl/renderer/drawable.hpp>
#include <mbgl/util/image.hpp>
#include <mbgl/util/mat4.hpp>
#include <mbgl/util/optional.hpp>
@@ -27,14 +29,11 @@ public:
UnassociatedImage image;
optional<gl::Texture> texture;
+
// Bucket specific vertices are used for Image Sources only
// Raster Tile Sources use the default buffers from Painter
- gl::VertexVector<RasterLayoutVertex> vertices;
- gl::IndexVector<gl::Triangles> indices;
- gl::SegmentVector<RasterAttributes> segments;
-
- optional<gl::VertexBuffer<RasterLayoutVertex>> vertexBuffer;
- optional<gl::IndexBuffer<gl::Triangles>> indexBuffer;
+ IndexedPrimitives<gl::Triangles, RasterLayoutVertex, RasterAttributes> primitives;
+ optional<Drawable<gl::Triangles, RasterLayoutVertex, RasterAttributes>> drawable;
};
} // namespace mbgl
diff --git a/src/mbgl/renderer/indexed_primitives.hpp b/src/mbgl/renderer/indexed_primitives.hpp
index c75fe61b18..8f76b60c1d 100644
--- a/src/mbgl/renderer/indexed_primitives.hpp
+++ b/src/mbgl/renderer/indexed_primitives.hpp
@@ -47,6 +47,10 @@ public:
segment.indexLength += i.size() * DrawMode::bufferGroupSize;
}
+ bool empty() const {
+ return segmentInfo.empty();
+ }
+
// Accessors for test suite.
const gl::VertexVector<LayoutVertex>& getVertices() const {
return vertices;
diff --git a/src/mbgl/renderer/painter.hpp b/src/mbgl/renderer/painter.hpp
index 9e81f50a5a..1aa3c78fce 100644
--- a/src/mbgl/renderer/painter.hpp
+++ b/src/mbgl/renderer/painter.hpp
@@ -80,6 +80,8 @@ public:
void cleanup();
+ using RasterDrawable = Drawable<gl::Triangles, RasterLayoutVertex, RasterAttributes>;
+
void renderClippingMask(const UnwrappedTileID&, const ClipID&);
void renderTileDebug(const RenderTile&);
void renderTileDebug(const mat4& matrix);
@@ -88,7 +90,7 @@ public:
void renderLine(PaintParameters&, LineBucket&, const RenderLineLayer&, const RenderTile&);
void renderCircle(PaintParameters&, CircleBucket&, const RenderCircleLayer&, const RenderTile&);
void renderSymbol(PaintParameters&, SymbolBucket&, const RenderSymbolLayer&, const RenderTile&);
- void renderRaster(PaintParameters&, RasterBucket&, const RenderRasterLayer&, const mat4&, bool useBucketBuffers /* = false */);
+ void renderRaster(PaintParameters&, RasterBucket&, const RenderRasterLayer&, const mat4&, const RasterDrawable&);
void renderBackground(PaintParameters&, const RenderBackgroundLayer&);
void renderItem(PaintParameters&, const RenderItem&);
diff --git a/src/mbgl/renderer/painters/painter_raster.cpp b/src/mbgl/renderer/painters/painter_raster.cpp
index aa092e94b4..5b5c4cc45c 100644
--- a/src/mbgl/renderer/painters/painter_raster.cpp
+++ b/src/mbgl/renderer/painters/painter_raster.cpp
@@ -43,7 +43,7 @@ void Painter::renderRaster(PaintParameters& parameters,
RasterBucket& bucket,
const RenderRasterLayer& layer,
const mat4& matrix,
- bool useBucketBuffers = false) {
+ const RasterDrawable& drawable) {
if (pass != RenderPass::Translucent)
return;
if (!bucket.hasData())
@@ -77,9 +77,9 @@ void Painter::renderRaster(PaintParameters& parameters,
uniforms::u_scale_parent::Value{ 1.0f },
uniforms::u_tl_parent::Value{ std::array<float, 2> {{ 0.0f, 0.0f }} },
},
- useBucketBuffers ? *bucket.vertexBuffer : rasterDrawable.vertices,
- useBucketBuffers ? *bucket.indexBuffer : rasterDrawable.indices,
- useBucketBuffers ? bucket.segments : rasterDrawable.segments,
+ drawable.vertices,
+ drawable.indices,
+ drawable.segments,
paintAttributeData,
properties,
state.getZoom()
diff --git a/src/mbgl/renderer/sources/render_image_source.cpp b/src/mbgl/renderer/sources/render_image_source.cpp
index d9c0355573..c4cb946349 100644
--- a/src/mbgl/renderer/sources/render_image_source.cpp
+++ b/src/mbgl/renderer/sources/render_image_source.cpp
@@ -147,19 +147,18 @@ void RenderImageSource::update(Immutable<style::Source::Impl> baseImpl_,
}
// Set Bucket Vertices, Indices, and segments
- bucket->vertices.emplace_back(
- RasterProgram::layoutVertex({ geomCoords[0].x, geomCoords[0].y }, { 0, 0 }));
- bucket->vertices.emplace_back(
- RasterProgram::layoutVertex({ geomCoords[1].x, geomCoords[1].y }, { 32767, 0 }));
- bucket->vertices.emplace_back(
- RasterProgram::layoutVertex({ geomCoords[3].x, geomCoords[3].y }, { 0, 32767 }));
- bucket->vertices.emplace_back(
- RasterProgram::layoutVertex({ geomCoords[2].x, geomCoords[2].y }, { 32767, 32767 }));
-
- bucket->indices.emplace_back(0, 1, 2);
- bucket->indices.emplace_back(1, 2, 3);
-
- bucket->segments.emplace_back(gl::SegmentInfo{ 0, 0, 4, 6 });
+ bucket->primitives.add(
+ {
+ RasterProgram::layoutVertex({ geomCoords[0].x, geomCoords[0].y }, { 0, 0 }),
+ RasterProgram::layoutVertex({ geomCoords[1].x, geomCoords[1].y }, { 32767, 0 }),
+ RasterProgram::layoutVertex({ geomCoords[3].x, geomCoords[3].y }, { 0, 32767 }),
+ RasterProgram::layoutVertex({ geomCoords[2].x, geomCoords[2].y }, { 32767, 32767 }),
+ },
+ {
+ {{ 0, 1, 2 }},
+ {{ 1, 2, 3 }},
+ }
+ );
}
void RenderImageSource::render(Painter& painter,