[core] Reuse RasterBucket for ImageSource

This commit is contained in:
Asheem Mamoowala
2017-05-31 23:14:12 -07:00
parent 8b37a0704c
commit 5ff9d6e31b
6 changed files with 29 additions and 7 deletions

View File

@@ -24,6 +24,7 @@ public:
std::size_t byteSize() const { return v.size() * sizeof(uint16_t); }
bool empty() const { return v.empty(); }
void clear() { v.clear(); }
const uint16_t* data() const { return v.data(); }
private:

View File

@@ -26,6 +26,7 @@ public:
std::size_t byteSize() const { return v.size() * sizeof(Vertex); }
bool empty() const { return v.empty(); }
void clear() { v.clear(); }
const Vertex* data() const { return v.data(); }
private:

View File

@@ -12,10 +12,6 @@ using namespace style;
RasterBucket::RasterBucket(UnassociatedImage&& image_) : image(std::move(image_)) {
}
RasterBucket::RasterBucket(RasterBucket&& other) : image(std::move(other.image)) {
uploaded = false;
}
void RasterBucket::upload(gl::Context& context) {
texture = context.createTexture(image);
if (!vertices.empty()) {
@@ -25,6 +21,15 @@ void RasterBucket::upload(gl::Context& context) {
uploaded = true;
}
void RasterBucket::clear() {
vertexBuffer = {};
indexBuffer = {};
segments.clear();
vertices.clear();
indices.clear();
uploaded = false;
}
void RasterBucket::render(Painter& painter,
PaintParameters& parameters,
const RenderLayer& layer,

View File

@@ -14,7 +14,6 @@ namespace mbgl {
class RasterBucket : public Bucket {
public:
RasterBucket(UnassociatedImage&&);
RasterBucket(RasterBucket&&);
void upload(gl::Context&) override;
void render(Painter&, PaintParameters&, const RenderLayer&, const RenderTile&) override;
@@ -24,6 +23,7 @@ public:
const mat4& matrix);
bool hasData() const override;
void clear();
UnassociatedImage image;
optional<gl::Texture> texture;

View File

@@ -137,8 +137,7 @@ void RenderImageSource::updateTiles(const TileParameters& parameters) {
}
bucket = std::make_unique<RasterBucket>(std::move(img));
} else {
// Reuse the bucket
bucket = std::make_unique<RasterBucket>(std::move(*bucket));
bucket->clear();
}
// Set Bucket Vertices, Indices, and segments

View File

@@ -3,9 +3,11 @@
#include <mbgl/renderer/buckets/circle_bucket.hpp>
#include <mbgl/renderer/buckets/fill_bucket.hpp>
#include <mbgl/renderer/buckets/line_bucket.hpp>
#include <mbgl/renderer/buckets/raster_bucket.hpp>
#include <mbgl/renderer/buckets/symbol_bucket.hpp>
#include <mbgl/renderer/bucket_parameters.hpp>
#include <mbgl/style/layers/symbol_layer_properties.hpp>
#include <mbgl/gl/context.hpp>
#include <mbgl/map/mode.hpp>
@@ -36,3 +38,17 @@ TEST(Buckets, SymbolBucket) {
ASSERT_FALSE(bucket.hasTextData());
ASSERT_FALSE(bucket.hasCollisionBoxData());
}
TEST(Buckets, RasterBucket) {
gl::Context context;
UnassociatedImage rgba({ 1, 1 });
RasterBucket bucket = { std::move(rgba) };
ASSERT_TRUE(bucket.needsUpload());
bucket.upload(context);
ASSERT_FALSE(bucket.needsUpload());
bucket.clear();
ASSERT_TRUE(bucket.needsUpload());
}