summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/layers/render_line_layer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/layers/render_line_layer.cpp')
-rw-r--r--src/mbgl/renderer/layers/render_line_layer.cpp53
1 files changed, 25 insertions, 28 deletions
diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp
index b0ff011447..25ed647aae 100644
--- a/src/mbgl/renderer/layers/render_line_layer.cpp
+++ b/src/mbgl/renderer/layers/render_line_layer.cpp
@@ -1,6 +1,8 @@
#include <mbgl/geometry/feature_index.hpp>
#include <mbgl/geometry/line_atlas.hpp>
#include <mbgl/gfx/cull_face_mode.hpp>
+#include <mbgl/math/clamp.hpp>
+#include <mbgl/math/log2.hpp>
#include <mbgl/programs/line_program.hpp>
#include <mbgl/programs/programs.hpp>
#include <mbgl/renderer/buckets/line_bucket.hpp>
@@ -15,8 +17,6 @@
#include <mbgl/tile/tile.hpp>
#include <mbgl/util/intersection_tests.hpp>
#include <mbgl/util/math.hpp>
-#include <mbgl/math/log2.hpp>
-#include <mbgl/math/clamp.hpp>
namespace mbgl {
@@ -76,8 +76,8 @@ void RenderLineLayer::prepare(const LayerPrepareParameters& params) {
const auto& evaluated = getEvaluated<LineLayerProperties>(renderData->layerProperties);
auto& bucket = static_cast<LineBucket&>(*renderData->bucket);
if (!evaluated.get<LineDasharray>().from.empty()) {
- const LinePatternCap cap = bucket.layout.get<LineCap>() == LineCapType::Round
- ? LinePatternCap::Round : LinePatternCap::Square;
+ const LinePatternCap cap =
+ bucket.layout.get<LineCap>() == LineCapType::Round ? LinePatternCap::Round : LinePatternCap::Square;
// Ensures that the dash data gets added to the atlas.
params.lineAtlas.getDashPatternTexture(
evaluated.get<LineDasharray>().from, evaluated.get<LineDasharray>().to, cap);
@@ -88,8 +88,7 @@ void RenderLineLayer::prepare(const LayerPrepareParameters& params) {
}
void RenderLineLayer::upload(gfx::UploadPass& uploadPass) {
- if (unevaluated.get<LineGradient>().getValue().isUndefined())
- return;
+ if (unevaluated.get<LineGradient>().getValue().isUndefined()) return;
for (const RenderTile& tile : *renderTiles) {
const LayerRenderData* renderData = tile.getLayerRenderData(*baseImpl);
@@ -207,30 +206,25 @@ void RenderLineLayer::render(PaintParameters& parameters) {
assert(bucket.gradientTexture);
auto& programInstance = parameters.programs.getLineLayerPrograms().lineGradient;
- auto&& uniformValues = LineGradientProgram::layoutUniformValues(
- evaluated,
- tile,
- parameters.state,
- parameters.pixelsToGLUnits,
- parameters.pixelRatio,
- bucket.lineClips.size());
+ auto&& uniformValues = LineGradientProgram::layoutUniformValues(evaluated,
+ tile,
+ parameters.state,
+ parameters.pixelsToGLUnits,
+ parameters.pixelRatio,
+ bucket.lineClips.size());
auto&& textureBindings = LineGradientProgram::TextureBindings{
- textures::image::Value{ bucket.gradientTexture->getResource(), samplerFiler },
+ textures::image::Value{bucket.gradientTexture->getResource(), samplerFiler},
};
const auto& paintPropertyBinders = bucket.paintPropertyBinders.at(getID());
const auto allUniformValues =
- programInstance.computeAllUniformValues(std::forward<decltype(uniformValues)>(uniformValues),
- paintPropertyBinders,
- evaluated,
- parameters.state.getZoom());
+ LineGradientProgram::computeAllUniformValues(std::forward<decltype(uniformValues)>(uniformValues),
+ paintPropertyBinders,
+ evaluated,
+ parameters.state.getZoom());
const auto allAttributeBindings = LineGradientProgram::computeAllAttributeBindings(
- *bucket.vertexBuffer,
- *bucket.vertexBuffer2,
- paintPropertyBinders,
- evaluated
- );
+ *bucket.vertexBuffer, *bucket.vertexBuffer2, paintPropertyBinders, evaluated);
- checkRenderability(parameters, programInstance.activeBindingCount(allAttributeBindings));
+ checkRenderability(parameters, LineGradientProgram::activeBindingCount(allAttributeBindings));
programInstance.draw(parameters.context,
*parameters.renderPass,
@@ -332,7 +326,10 @@ bool RenderLineLayer::queryIntersectsFeature(const GeometryCoordinates& queryGeo
halfWidth);
}
-void RenderLineLayer::updateColorRamp(LineBucket& lineBucket, const RenderTile& tile, const RenderSource& source, const TransformState& state) {
+void RenderLineLayer::updateColorRamp(LineBucket& lineBucket,
+ const RenderTile& tile,
+ const RenderSource& source,
+ const TransformState& state) {
auto colorValue = unevaluated.get<LineGradient>().getValue();
if (colorValue.isUndefined()) {
return;
@@ -344,14 +341,14 @@ void RenderLineLayer::updateColorRamp(LineBucket& lineBucket, const RenderTile&
if (isStepExpression) {
const uint8_t sourceMaxZoom = source.getMaxZoom();
const uint8_t zoomDiff = static_cast<uint8_t>(state.getMaxZoom()) - tile.id.canonical.z;
- const float potentialOverzoom = tile.id.canonical.z == sourceMaxZoom ?
- ceilf(static_cast<float>(1 << zoomDiff)) : 1.0f;
+ const float potentialOverzoom =
+ tile.id.canonical.z == sourceMaxZoom ? ceilf(static_cast<float>(1 << zoomDiff)) : 1.0f;
const float lineLength = lineBucket.maxLineLength / static_cast<float>(util::EXTENT);
// Logical pixel tile size is 512px, and 1024px right before current zoom + 1
const float maxTileSize = 1024;
// Maximum possible texture coverage heuristic, bound by hardware max texture size
const float maxTextureCoverage = lineLength * maxTileSize * potentialOverzoom;
- const uint32_t nextPowerOf2 = static_cast<uint32_t>(powf(2.0f, ceilf(util::log2<float>(maxTextureCoverage))));
+ const auto nextPowerOf2 = static_cast<uint32_t>(powf(2.0f, ceilf(util::log2<float>(maxTextureCoverage))));
textureResolution = util::clamp<uint32_t>(nextPowerOf2, 256, gfx::Context::maxTextureSize);
samplerFiler = gfx::TextureFilterType::Nearest;