diff options
Diffstat (limited to 'src/mbgl/renderer/layers/render_line_layer.cpp')
-rw-r--r-- | src/mbgl/renderer/layers/render_line_layer.cpp | 53 |
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; |