[core] Reuse RasterBucket for ImageSource
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user