summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/layers/render_raster_layer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/layers/render_raster_layer.cpp')
-rw-r--r--src/mbgl/renderer/layers/render_raster_layer.cpp43
1 files changed, 23 insertions, 20 deletions
diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp
index 8a1a8a6c28..047333d5e5 100644
--- a/src/mbgl/renderer/layers/render_raster_layer.cpp
+++ b/src/mbgl/renderer/layers/render_raster_layer.cpp
@@ -16,7 +16,7 @@ using namespace style;
namespace {
-inline const RasterLayer::Impl& impl(const Immutable<style::Layer::Impl>& impl) {
+inline const RasterLayer::Impl& impl_cast(const Immutable<style::Layer::Impl>& impl) {
assert(impl->getTypeInfo() == RasterLayer::Impl::staticTypeInfo());
return static_cast<const RasterLayer::Impl&>(*impl);
}
@@ -25,13 +25,12 @@ inline const RasterLayer::Impl& impl(const Immutable<style::Layer::Impl>& impl)
RenderRasterLayer::RenderRasterLayer(Immutable<style::RasterLayer::Impl> _impl)
: RenderLayer(makeMutable<RasterLayerProperties>(std::move(_impl))),
- unevaluated(impl(baseImpl).paint.untransitioned()) {
-}
+ unevaluated(impl_cast(baseImpl).paint.untransitioned()) {}
RenderRasterLayer::~RenderRasterLayer() = default;
void RenderRasterLayer::transition(const TransitionParameters& parameters) {
- unevaluated = impl(baseImpl).paint.transitioned(parameters, std::move(unevaluated));
+ unevaluated = impl_cast(baseImpl).paint.transitioned(parameters, std::move(unevaluated));
}
void RenderRasterLayer::evaluate(const PropertyEvaluationParameters& parameters) {
@@ -153,14 +152,14 @@ void RenderRasterLayer::render(PaintParameters& parameters) {
size_t i = 0;
for (const auto& matrix_ : imageData->matrices) {
draw(matrix_,
- *bucket.vertexBuffer,
- *bucket.indexBuffer,
- bucket.segments,
- RasterProgram::TextureBindings{
- textures::image0::Value{ bucket.texture->getResource(), filter },
- textures::image1::Value{ bucket.texture->getResource(), filter },
- },
- bucket.drawScopeID + std::to_string(i++));
+ *bucket.vertexBuffer,
+ *bucket.indexBuffer,
+ bucket.segments,
+ RasterProgram::TextureBindings{
+ textures::image0::Value{bucket.texture->getResource(), filter},
+ textures::image1::Value{bucket.texture->getResource(), filter},
+ },
+ std::to_string(i++));
}
} else if (renderTiles) {
for (const RenderTile& tile : *renderTiles) {
@@ -174,28 +173,32 @@ void RenderRasterLayer::render(PaintParameters& parameters) {
continue;
assert(bucket.texture);
- if (bucket.vertexBuffer && bucket.indexBuffer && !bucket.segments.empty()) {
+ if (bucket.vertexBuffer && bucket.indexBuffer) {
// Draw only the parts of the tile that aren't drawn by another tile in the layer.
draw(parameters.matrixForTile(tile.id, true),
*bucket.vertexBuffer,
*bucket.indexBuffer,
bucket.segments,
RasterProgram::TextureBindings{
- textures::image0::Value{ bucket.texture->getResource(), filter },
- textures::image1::Value{ bucket.texture->getResource(), filter },
+ textures::image0::Value{bucket.texture->getResource(), filter},
+ textures::image1::Value{bucket.texture->getResource(), filter},
},
- bucket.drawScopeID);
+ "image");
} else {
// Draw the full tile.
+ if (bucket.segments.empty()) {
+ // Copy over the segments so that we can create our own DrawScopes.
+ bucket.segments = parameters.staticData.rasterSegments();
+ }
draw(parameters.matrixForTile(tile.id, true),
*parameters.staticData.rasterVertexBuffer,
*parameters.staticData.quadTriangleIndexBuffer,
- parameters.staticData.rasterSegments,
+ bucket.segments,
RasterProgram::TextureBindings{
- textures::image0::Value{ bucket.texture->getResource(), filter },
- textures::image1::Value{ bucket.texture->getResource(), filter },
+ textures::image0::Value{bucket.texture->getResource(), filter},
+ textures::image1::Value{bucket.texture->getResource(), filter},
},
- bucket.drawScopeID);
+ "image");
}
}
}