diff options
Diffstat (limited to 'src/mbgl/renderer/buckets/raster_bucket.cpp')
-rw-r--r-- | src/mbgl/renderer/buckets/raster_bucket.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/mbgl/renderer/buckets/raster_bucket.cpp b/src/mbgl/renderer/buckets/raster_bucket.cpp new file mode 100644 index 0000000000..49ec0065c3 --- /dev/null +++ b/src/mbgl/renderer/buckets/raster_bucket.cpp @@ -0,0 +1,53 @@ +#include <mbgl/renderer/buckets/raster_bucket.hpp> +#include <mbgl/renderer/layers/render_raster_layer.hpp> +#include <mbgl/programs/raster_program.hpp> +#include <mbgl/renderer/painter.hpp> +#include <mbgl/gl/context.hpp> +#include <mbgl/renderer/render_tile.hpp> + +namespace mbgl { + +using namespace style; + +RasterBucket::RasterBucket(UnassociatedImage&& image_) : image(std::move(image_)) { +} + +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)); + } + 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, + const RenderTile& tile) { + painter.renderRaster(parameters, *this, *layer.as<RenderRasterLayer>(), tile.matrix, false); +} + +void RasterBucket::render(Painter& painter, + PaintParameters& parameters, + const RenderLayer& layer, + const mat4& matrix) { + painter.renderRaster(parameters, *this, *layer.as<RenderRasterLayer>(), matrix, true); +} + +bool RasterBucket::hasData() const { + return true; +} + +} // namespace mbgl |