summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer')
-rw-r--r--src/mbgl/renderer/image_manager.cpp12
-rw-r--r--src/mbgl/renderer/image_manager.hpp4
-rw-r--r--src/mbgl/renderer/layers/render_background_layer.cpp10
-rw-r--r--src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp15
-rw-r--r--src/mbgl/renderer/layers/render_fill_layer.cpp9
-rw-r--r--src/mbgl/renderer/layers/render_heatmap_layer.cpp12
-rw-r--r--src/mbgl/renderer/layers/render_hillshade_layer.cpp26
-rw-r--r--src/mbgl/renderer/layers/render_line_layer.cpp18
-rw-r--r--src/mbgl/renderer/layers/render_raster_layer.cpp31
-rw-r--r--src/mbgl/renderer/layers/render_symbol_layer.cpp32
-rw-r--r--src/mbgl/renderer/renderer_impl.cpp4
11 files changed, 101 insertions, 72 deletions
diff --git a/src/mbgl/renderer/image_manager.cpp b/src/mbgl/renderer/image_manager.cpp
index d8f8cf615d..9c9f6c6e08 100644
--- a/src/mbgl/renderer/image_manager.cpp
+++ b/src/mbgl/renderer/image_manager.cpp
@@ -167,19 +167,19 @@ Size ImageManager::getPixelSize() const {
};
}
-void ImageManager::upload(gfx::Context& context, uint8_t unit) {
+void ImageManager::upload(gfx::Context& context) {
if (!atlasTexture) {
- atlasTexture = context.createTexture(atlasImage, unit);
+ atlasTexture = context.createTexture(atlasImage);
} else if (dirty) {
- context.updateTexture(*atlasTexture, atlasImage, unit);
+ context.updateTexture(*atlasTexture, atlasImage);
}
dirty = false;
}
-void ImageManager::bind(gfx::Context& context, uint8_t unit) {
- upload(context, unit);
- context.bindTexture(*atlasTexture, unit, gfx::TextureFilterType::Linear);
+gfx::TextureBinding ImageManager::textureBinding(gfx::Context& context) {
+ upload(context);
+ return { *atlasTexture->resource, gfx::TextureFilterType::Linear };
}
} // namespace mbgl
diff --git a/src/mbgl/renderer/image_manager.hpp b/src/mbgl/renderer/image_manager.hpp
index acc076965e..e56f30ac3f 100644
--- a/src/mbgl/renderer/image_manager.hpp
+++ b/src/mbgl/renderer/image_manager.hpp
@@ -65,8 +65,8 @@ private:
public:
optional<ImagePosition> getPattern(const std::string& name);
- void bind(gfx::Context&, uint8_t unit);
- void upload(gfx::Context&, uint8_t unit);
+ gfx::TextureBinding textureBinding(gfx::Context&);
+ void upload(gfx::Context&);
Size getPixelSize() const;
diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp
index 61c8fa208e..ae89a08cac 100644
--- a/src/mbgl/renderer/layers/render_background_layer.cpp
+++ b/src/mbgl/renderer/layers/render_background_layer.cpp
@@ -50,7 +50,7 @@ void RenderBackgroundLayer::render(PaintParameters& parameters, RenderSource*) {
const Properties<>::PossiblyEvaluated properties;
const BackgroundProgram::Binders paintAttributeData(properties, 0);
- auto draw = [&](auto& program, auto&& uniformValues, auto&& textureBindings) {
+ auto draw = [&](auto& program, auto&& uniformValues, const auto& textureBindings) {
const auto allUniformValues = program.computeAllUniformValues(
std::move(uniformValues),
paintAttributeData,
@@ -76,7 +76,7 @@ void RenderBackgroundLayer::render(PaintParameters& parameters, RenderSource*) {
parameters.staticData.tileTriangleSegments,
allUniformValues,
allAttributeBindings,
- std::move(textureBindings),
+ textureBindings,
getID()
);
};
@@ -88,8 +88,6 @@ void RenderBackgroundLayer::render(PaintParameters& parameters, RenderSource*) {
if (!imagePosA || !imagePosB)
return;
- parameters.imageManager.bind(parameters.context, 0);
-
for (const auto& tileID : util::tileCover(parameters.state, parameters.state.getIntegerZoom())) {
draw(
parameters.programs.getBackgroundLayerPrograms().backgroundPattern,
@@ -103,7 +101,9 @@ void RenderBackgroundLayer::render(PaintParameters& parameters, RenderSource*) {
tileID,
parameters.state
),
- BackgroundPatternProgram::TextureBindings{}
+ BackgroundPatternProgram::TextureBindings{
+ textures::u_image::Value{ parameters.imageManager.textureBinding(parameters.context) },
+ }
);
}
} else {
diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp
index 5699bc5d4a..99bdc3a8c6 100644
--- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp
+++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp
@@ -140,7 +140,6 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters, RenderSource*
GeometryTile& geometryTile = static_cast<GeometryTile&>(tile.tile);
optional<ImagePosition> patternPosA = geometryTile.getPattern(fillPatternValue.from);
optional<ImagePosition> patternPosB = geometryTile.getPattern(fillPatternValue.to);
- parameters.context.bindTexture(*geometryTile.iconAtlasTexture, 0, gfx::TextureFilterType::Linear);
FillExtrusionBucket& bucket = *bucket_;
draw(
@@ -160,14 +159,14 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters, RenderSource*
),
patternPosA,
patternPosB,
- FillExtrusionPatternProgram::TextureBindings{}
+ FillExtrusionPatternProgram::TextureBindings{
+ textures::u_image::Value{ *geometryTile.iconAtlasTexture->resource, gfx::TextureFilterType::Linear },
+ }
);
}
}
} else if (parameters.pass == RenderPass::Translucent) {
- parameters.context.bindTexture(renderTexture->getTexture());
-
const auto& size = parameters.staticData.backendSize;
mat4 viewportMat;
@@ -180,8 +179,8 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters, RenderSource*
const auto allUniformValues = programInstance.computeAllUniformValues(
ExtrusionTextureProgram::UniformValues{
- uniforms::u_matrix::Value( viewportMat ), uniforms::u_world::Value( size ),
- uniforms::u_image::Value( 0 ),
+ uniforms::u_matrix::Value( viewportMat ),
+ uniforms::u_world::Value( size ),
uniforms::u_opacity::Value( evaluated.get<FillExtrusionOpacity>() )
},
paintAttributeData,
@@ -207,7 +206,9 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters, RenderSource*
parameters.staticData.extrusionTextureSegments,
allUniformValues,
allAttributeBindings,
- ExtrusionTextureProgram::TextureBindings{},
+ ExtrusionTextureProgram::TextureBindings{
+ textures::u_image::Value{ *renderTexture->getTexture().resource },
+ },
getID());
}
}
diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp
index 798749711d..3e36561ffb 100644
--- a/src/mbgl/renderer/layers/render_fill_layer.cpp
+++ b/src/mbgl/renderer/layers/render_fill_layer.cpp
@@ -152,7 +152,6 @@ void RenderFillLayer::render(PaintParameters& parameters, RenderSource*) {
optional<ImagePosition> patternPosA = geometryTile.getPattern(fillPatternValue.from);
optional<ImagePosition> patternPosB = geometryTile.getPattern(fillPatternValue.to);
- parameters.context.bindTexture(*geometryTile.iconAtlasTexture, 0, gfx::TextureFilterType::Linear);
auto bucket_ = tile.tile.getBucket<FillBucket>(*baseImpl);
if (!bucket_) {
continue;
@@ -215,7 +214,9 @@ void RenderFillLayer::render(PaintParameters& parameters, RenderSource*) {
parameters.depthModeForSublayer(1, gfx::DepthMaskType::ReadWrite),
*bucket.triangleIndexBuffer,
bucket.triangleSegments,
- FillProgram::TextureBindings{});
+ FillPatternProgram::TextureBindings{
+ textures::u_image::Value{ *geometryTile.iconAtlasTexture->resource, gfx::TextureFilterType::Linear },
+ });
if (evaluated.get<FillAntialias>() && unevaluated.get<FillOutlineColor>().isUndefined()) {
draw(parameters.programs.getFillLayerPrograms().fillOutlinePattern,
@@ -223,7 +224,9 @@ void RenderFillLayer::render(PaintParameters& parameters, RenderSource*) {
parameters.depthModeForSublayer(2, gfx::DepthMaskType::ReadOnly),
*bucket.lineIndexBuffer,
bucket.lineSegments,
- FillOutlineProgram::TextureBindings{});
+ FillOutlinePatternProgram::TextureBindings{
+ textures::u_image::Value{ *geometryTile.iconAtlasTexture->resource, gfx::TextureFilterType::Linear },
+ });
}
}
}
diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.cpp b/src/mbgl/renderer/layers/render_heatmap_layer.cpp
index 9dd1ee6493..74b976658e 100644
--- a/src/mbgl/renderer/layers/render_heatmap_layer.cpp
+++ b/src/mbgl/renderer/layers/render_heatmap_layer.cpp
@@ -77,7 +77,7 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) {
}
if (!colorRampTexture) {
- colorRampTexture = parameters.context.createTexture(colorRamp, 1, gfx::TextureChannelDataType::UnsignedByte);
+ colorRampTexture = parameters.context.createTexture(colorRamp, gfx::TextureChannelDataType::UnsignedByte);
}
parameters.context.clear(Color{ 0.0f, 0.0f, 0.0f, 1.0f }, {}, {});
@@ -134,9 +134,6 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) {
}
} else if (parameters.pass == RenderPass::Translucent) {
- parameters.context.bindTexture(renderTexture->getTexture(), 0, gfx::TextureFilterType::Linear);
- parameters.context.bindTexture(*colorRampTexture, 1, gfx::TextureFilterType::Linear);
-
const auto& size = parameters.staticData.backendSize;
mat4 viewportMat;
@@ -150,8 +147,6 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) {
const auto allUniformValues = programInstance.computeAllUniformValues(
HeatmapTextureProgram::UniformValues{
uniforms::u_matrix::Value( viewportMat ), uniforms::u_world::Value( size ),
- uniforms::u_image::Value( 0 ),
- uniforms::u_color_ramp::Value( 1 ),
uniforms::u_opacity::Value( evaluated.get<HeatmapOpacity>() )
},
paintAttributeData,
@@ -177,7 +172,10 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) {
parameters.staticData.extrusionTextureSegments,
allUniformValues,
allAttributeBindings,
- HeatmapProgram::TextureBindings{},
+ HeatmapTextureProgram::TextureBindings{
+ textures::u_image::Value{ *renderTexture->getTexture().resource, gfx::TextureFilterType::Linear },
+ textures::u_color_ramp::Value{ *colorRampTexture->resource, gfx::TextureFilterType::Linear },
+ },
getID()
);
}
diff --git a/src/mbgl/renderer/layers/render_hillshade_layer.cpp b/src/mbgl/renderer/layers/render_hillshade_layer.cpp
index 70ff2379d4..b428e357e7 100644
--- a/src/mbgl/renderer/layers/render_hillshade_layer.cpp
+++ b/src/mbgl/renderer/layers/render_hillshade_layer.cpp
@@ -67,7 +67,8 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src
const auto& vertexBuffer,
const auto& indexBuffer,
const auto& segments,
- const UnwrappedTileID& id) {
+ const UnwrappedTileID& id,
+ const auto& textureBindings) {
auto& programInstance = parameters.programs.getHillshadeLayerPrograms().hillshade;
const HillshadeProgram::Binders paintAttributeData{ evaluated, 0 };
@@ -75,7 +76,6 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src
const auto allUniformValues = programInstance.computeAllUniformValues(
HillshadeProgram::UniformValues {
uniforms::u_matrix::Value( matrix ),
- uniforms::u_image::Value( 0 ),
uniforms::u_highlight::Value( evaluated.get<HillshadeHighlightColor>() ),
uniforms::u_shadow::Value( evaluated.get<HillshadeShadowColor>() ),
uniforms::u_accent::Value( evaluated.get<HillshadeAccentColor>() ),
@@ -105,7 +105,7 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src
segments,
allUniformValues,
allAttributeBindings,
- HillshadeProgram::TextureBindings{},
+ textureBindings,
getID()
);
};
@@ -126,12 +126,12 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src
}
if (!bucket.isPrepared() && parameters.pass == RenderPass::Pass3D) {
+ assert(bucket.dem);
const uint16_t stride = bucket.getDEMData().stride;
const uint16_t tilesize = bucket.getDEMData().dim;
OffscreenTexture view(parameters.context, { tilesize, tilesize });
view.bind();
-
- parameters.context.bindTexture(*bucket.dem, 0, gfx::TextureFilterType::Nearest, gfx::TextureMipMapType::No, gfx::TextureWrapType::Clamp, gfx::TextureWrapType::Clamp);
+
const Properties<>::PossiblyEvaluated properties;
const HillshadePrepareProgram::Binders paintAttributeData{ properties, 0 };
@@ -143,7 +143,6 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src
uniforms::u_dimension::Value( {{stride, stride}} ),
uniforms::u_zoom::Value( float(tile.id.canonical.z) ),
uniforms::u_maxzoom::Value( float(maxzoom) ),
- uniforms::u_image::Value( 0 )
},
paintAttributeData,
properties,
@@ -168,14 +167,15 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src
parameters.staticData.rasterSegments,
allUniformValues,
allAttributeBindings,
- HillshadePrepareProgram::TextureBindings{},
+ HillshadePrepareProgram::TextureBindings{
+ textures::u_image::Value{ *bucket.dem->resource },
+ },
getID()
);
bucket.texture = std::move(view.getTexture());
bucket.setPrepared(true);
} else if (parameters.pass == RenderPass::Translucent) {
assert(bucket.texture);
- parameters.context.bindTexture(*bucket.texture, 0, gfx::TextureFilterType::Linear, gfx::TextureMipMapType::No, gfx::TextureWrapType::Clamp, gfx::TextureWrapType::Clamp);
if (bucket.vertexBuffer && bucket.indexBuffer && !bucket.segments.empty()) {
// Draw only the parts of the tile that aren't drawn by another tile in the layer.
@@ -183,14 +183,20 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src
*bucket.vertexBuffer,
*bucket.indexBuffer,
bucket.segments,
- tile.id);
+ tile.id,
+ HillshadeProgram::TextureBindings{
+ textures::u_image::Value{ *bucket.texture->resource, gfx::TextureFilterType::Linear },
+ });
} else {
// Draw the full tile.
draw(parameters.matrixForTile(tile.id, true),
parameters.staticData.rasterVertexBuffer,
parameters.staticData.quadTriangleIndexBuffer,
parameters.staticData.rasterSegments,
- tile.id);
+ tile.id,
+ HillshadeProgram::TextureBindings{
+ textures::u_image::Value{ *bucket.texture->resource, gfx::TextureFilterType::Linear },
+ });
}
}
diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp
index 9eb659f79f..f3947685fe 100644
--- a/src/mbgl/renderer/layers/render_line_layer.cpp
+++ b/src/mbgl/renderer/layers/render_line_layer.cpp
@@ -109,8 +109,6 @@ void RenderLineLayer::render(PaintParameters& parameters, RenderSource*) {
LinePatternPos posA = parameters.lineAtlas.getDashPosition(evaluated.get<LineDasharray>().from, cap);
LinePatternPos posB = parameters.lineAtlas.getDashPosition(evaluated.get<LineDasharray>().to, cap);
- parameters.lineAtlas.bind(parameters.context, 0);
-
draw(parameters.programs.getLineLayerPrograms().lineSDF,
LineSDFProgram::uniformValues(
evaluated,
@@ -124,13 +122,14 @@ void RenderLineLayer::render(PaintParameters& parameters, RenderSource*) {
parameters.lineAtlas.getSize().width),
{},
{},
- LineSDFProgram::TextureBindings{});
+ LineSDFProgram::TextureBindings{
+ parameters.lineAtlas.textureBinding(parameters.context),
+ });
} else if (!unevaluated.get<LinePattern>().isUndefined()) {
const auto linePatternValue = evaluated.get<LinePattern>().constantOr(Faded<std::basic_string<char>>{ "", ""});
assert(dynamic_cast<GeometryTile*>(&tile.tile));
- GeometryTile& geometryTile = static_cast<GeometryTile&>(tile.tile);
- parameters.context.bindTexture(*geometryTile.iconAtlasTexture, 0, gfx::TextureFilterType::Linear);
+ GeometryTile& geometryTile = static_cast<GeometryTile&>(tile.tile);
const Size texsize = geometryTile.iconAtlasTexture->size;
optional<ImagePosition> posA = geometryTile.getPattern(linePatternValue.from);
@@ -147,12 +146,13 @@ void RenderLineLayer::render(PaintParameters& parameters, RenderSource*) {
parameters.pixelRatio),
*posA,
*posB,
- LinePatternProgram::TextureBindings{});
+ LinePatternProgram::TextureBindings{
+ textures::u_image::Value{ *geometryTile.iconAtlasTexture->resource, gfx::TextureFilterType::Linear },
+ });
} else if (!unevaluated.get<LineGradient>().getValue().isUndefined()) {
if (!colorRampTexture) {
colorRampTexture = parameters.context.createTexture(colorRamp);
}
- parameters.context.bindTexture(*colorRampTexture, 0, gfx::TextureFilterType::Linear);
draw(parameters.programs.getLineLayerPrograms().lineGradient,
LineGradientProgram::uniformValues(
@@ -162,7 +162,9 @@ void RenderLineLayer::render(PaintParameters& parameters, RenderSource*) {
parameters.pixelsToGLUnits),
{},
{},
- LineGradientProgram::TextureBindings{});
+ LineGradientProgram::TextureBindings{
+ textures::u_image::Value{ *colorRampTexture->resource, gfx::TextureFilterType::Linear },
+ });
} else {
draw(parameters.programs.getLineLayerPrograms().line,
LineProgram::uniformValues(
diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp
index a9fdcc0320..f68acd4061 100644
--- a/src/mbgl/renderer/layers/render_raster_layer.cpp
+++ b/src/mbgl/renderer/layers/render_raster_layer.cpp
@@ -77,14 +77,13 @@ void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source
auto draw = [&] (const mat4& matrix,
const auto& vertexBuffer,
const auto& indexBuffer,
- const auto& segments) {
+ const auto& segments,
+ const auto& textureBindings) {
auto& programInstance = parameters.programs.getRasterLayerPrograms().raster;
const auto allUniformValues = programInstance.computeAllUniformValues(
RasterProgram::UniformValues {
uniforms::u_matrix::Value( matrix ),
- uniforms::u_image0::Value( 0 ),
- uniforms::u_image1::Value( 1 ),
uniforms::u_opacity::Value( evaluated.get<RasterOpacity>() ),
uniforms::u_fade_t::Value( 1 ),
uniforms::u_brightness_low::Value( evaluated.get<RasterBrightnessMin>() ),
@@ -119,7 +118,7 @@ void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source
segments,
allUniformValues,
allAttributeBindings,
- RasterProgram::TextureBindings{},
+ textureBindings,
getID()
);
};
@@ -129,16 +128,17 @@ void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source
if (RenderImageSource* imageSource = source->as<RenderImageSource>()) {
if (imageSource->isEnabled() && imageSource->isLoaded() && !imageSource->bucket->needsUpload()) {
RasterBucket& bucket = *imageSource->bucket;
-
assert(bucket.texture);
- parameters.context.bindTexture(*bucket.texture, 0, filter);
- parameters.context.bindTexture(*bucket.texture, 1, filter);
for (auto matrix_ : imageSource->matrices) {
draw(matrix_,
*bucket.vertexBuffer,
*bucket.indexBuffer,
- bucket.segments);
+ bucket.segments,
+ RasterProgram::TextureBindings{
+ textures::u_image0::Value{ *bucket.texture->resource, filter },
+ textures::u_image1::Value{ *bucket.texture->resource, filter },
+ });
}
}
} else {
@@ -153,21 +153,26 @@ void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source
continue;
assert(bucket.texture);
- parameters.context.bindTexture(*bucket.texture, 0, filter);
- parameters.context.bindTexture(*bucket.texture, 1, filter);
-
if (bucket.vertexBuffer && bucket.indexBuffer && !bucket.segments.empty()) {
// 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);
+ bucket.segments,
+ RasterProgram::TextureBindings{
+ textures::u_image0::Value{ *bucket.texture->resource, filter },
+ textures::u_image1::Value{ *bucket.texture->resource, filter },
+ });
} else {
// Draw the full tile.
draw(parameters.matrixForTile(tile.id, true),
parameters.staticData.rasterVertexBuffer,
parameters.staticData.quadTriangleIndexBuffer,
- parameters.staticData.rasterSegments);
+ parameters.staticData.rasterSegments,
+ RasterProgram::TextureBindings{
+ textures::u_image0::Value{ *bucket.texture->resource, filter },
+ textures::u_image1::Value{ *bucket.texture->resource, filter },
+ });
}
}
}
diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp
index a5ac6ceeea..e523a869b2 100644
--- a/src/mbgl/renderer/layers/render_symbol_layer.cpp
+++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp
@@ -158,9 +158,12 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) {
const bool iconScaled = layout.get<IconSize>().constantOr(1.0) != 1.0 || bucket.iconsNeedLinear;
const bool iconTransformed = values.rotationAlignment == AlignmentType::Map || parameters.state.getPitch() != 0;
- parameters.context.bindTexture(*geometryTile.iconAtlasTexture, 0,
- bucket.sdfIcons || parameters.state.isChanging() || iconScaled || iconTransformed
- ? gfx::TextureFilterType::Linear : gfx::TextureFilterType::Nearest);
+ const gfx::TextureBinding textureBinding{ *geometryTile.iconAtlasTexture->resource,
+ bucket.sdfIcons ||
+ parameters.state.isChanging() ||
+ iconScaled || iconTransformed
+ ? gfx::TextureFilterType::Linear
+ : gfx::TextureFilterType::Nearest };
const Size texsize = geometryTile.iconAtlasTexture->size;
@@ -173,7 +176,9 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) {
values,
bucketPaintProperties.iconBinders,
paintPropertyValues,
- SymbolSDFIconProgram::TextureBindings{});
+ SymbolSDFIconProgram::TextureBindings{
+ textureBinding,
+ });
}
if (values.hasFill) {
@@ -184,7 +189,9 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) {
values,
bucketPaintProperties.iconBinders,
paintPropertyValues,
- SymbolSDFIconProgram::TextureBindings{});
+ SymbolSDFIconProgram::TextureBindings{
+ textureBinding,
+ });
}
} else {
draw(parameters.programs.getSymbolLayerPrograms().symbolIcon,
@@ -194,12 +201,15 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) {
values,
bucketPaintProperties.iconBinders,
paintPropertyValues,
- SymbolIconProgram::TextureBindings{});
+ SymbolIconProgram::TextureBindings{
+ textureBinding,
+ });
}
}
if (bucket.hasTextData()) {
- parameters.context.bindTexture(*geometryTile.glyphAtlasTexture, 0, gfx::TextureFilterType::Linear);
+ const gfx::TextureBinding textureBinding{ *geometryTile.glyphAtlasTexture->resource,
+ gfx::TextureFilterType::Linear };
auto values = textPropertyValues(evaluated_, layout);
const auto& paintPropertyValues = textPaintProperties(evaluated_);
@@ -229,7 +239,9 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) {
values,
bucketPaintProperties.textBinders,
paintPropertyValues,
- SymbolSDFTextProgram::TextureBindings{});
+ SymbolSDFTextProgram::TextureBindings{
+ textureBinding,
+ });
}
if (values.hasFill) {
@@ -240,7 +252,9 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) {
values,
bucketPaintProperties.textBinders,
paintPropertyValues,
- SymbolSDFTextProgram::TextureBindings{});
+ SymbolSDFTextProgram::TextureBindings{
+ textureBinding,
+ });
}
}
diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp
index d66ba1767e..e3346a39a5 100644
--- a/src/mbgl/renderer/renderer_impl.cpp
+++ b/src/mbgl/renderer/renderer_impl.cpp
@@ -375,8 +375,8 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) {
{
MBGL_DEBUG_GROUP(parameters.context, "upload");
- parameters.imageManager.upload(parameters.context, 0);
- parameters.lineAtlas.upload(parameters.context, 0);
+ parameters.imageManager.upload(parameters.context);
+ parameters.lineAtlas.upload(parameters.context);
// Update all clipping IDs + upload buckets.
for (const auto& entry : renderSources) {