From b2a3e518c7e103aa7939e0cfe74d4b0440f33e05 Mon Sep 17 00:00:00 2001 From: Tim Sylvester Date: Tue, 2 May 2023 09:01:39 -0700 Subject: [PATCH] Drawable Renderer (#1570), refactor --- src/mbgl/renderer/render_orchestrator.cpp | 12 +++++++++++- src/mbgl/renderer/render_orchestrator.hpp | 2 +- src/mbgl/renderer/renderer.cpp | 12 +----------- src/mbgl/style/layers/background_layer_impl.cpp | 6 +++--- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index cf74adcc8..08b7a72da 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -779,7 +779,17 @@ const gfx::DrawablePtr& RenderOrchestrator::getDrawable(const util::SimpleIdenti void RenderOrchestrator::updateLayers(gfx::ShaderRegistry& shaders, gfx::Context& context, const TransformState& state, - const PropertyEvaluationParameters& evalParameters) { + const std::shared_ptr& updateParameters) { + + const bool isMapModeContinuous = updateParameters->mode == MapMode::Continuous; + const auto transitionOptions = isMapModeContinuous ? updateParameters->transitionOptions : style::TransitionOptions(); + const auto defDuration = isMapModeContinuous ? util::DEFAULT_TRANSITION_DURATION : Duration::zero(); + const PropertyEvaluationParameters evalParameters { + getZoomHistory(), + updateParameters->timePoint, + transitionOptions.duration.value_or(defDuration), + }; + std::vector> changes; for (auto& kv : layersRemoved) { diff --git a/src/mbgl/renderer/render_orchestrator.hpp b/src/mbgl/renderer/render_orchestrator.hpp index 9c9437711..1301bf45f 100644 --- a/src/mbgl/renderer/render_orchestrator.hpp +++ b/src/mbgl/renderer/render_orchestrator.hpp @@ -104,7 +104,7 @@ public: void updateLayers(gfx::ShaderRegistry&, gfx::Context&, const TransformState&, - const PropertyEvaluationParameters&); + const std::shared_ptr&); void processChanges(); diff --git a/src/mbgl/renderer/renderer.cpp b/src/mbgl/renderer/renderer.cpp index 872b19fb3..022da5c47 100644 --- a/src/mbgl/renderer/renderer.cpp +++ b/src/mbgl/renderer/renderer.cpp @@ -33,23 +33,13 @@ void Renderer::render(const std::shared_ptr& updateParameters) if (auto renderTree = impl->orchestrator.createRenderTree(updateParameters)) { renderTree->prepare(); - const bool isMapModeContinuous = updateParameters->mode == MapMode::Continuous; - const auto transitionOptions = isMapModeContinuous ? updateParameters->transitionOptions : style::TransitionOptions(); - //const TransitionParameters transitionParameters{updateParameters->timePoint, transitionOptions}; - const auto defDuration = isMapModeContinuous ? util::DEFAULT_TRANSITION_DURATION : Duration::zero(); - const PropertyEvaluationParameters evalParameters { - impl->orchestrator.getZoomHistory(), - updateParameters->timePoint, - transitionOptions.duration.value_or(defDuration), - }; - const auto& renderTreeParameters = renderTree->getParameters(); const auto& state = renderTreeParameters.transformParams.state; if (impl->staticData && impl->staticData->shaders) { auto& context = impl->backend.getContext(); auto& shaders = *impl->staticData->shaders; - impl->orchestrator.updateLayers(shaders, context, state, evalParameters); + impl->orchestrator.updateLayers(shaders, context, state, updateParameters); } impl->render(*renderTree); diff --git a/src/mbgl/style/layers/background_layer_impl.cpp b/src/mbgl/style/layers/background_layer_impl.cpp index 6fa0064f4..e1bc7e731 100644 --- a/src/mbgl/style/layers/background_layer_impl.cpp +++ b/src/mbgl/style/layers/background_layer_impl.cpp @@ -70,6 +70,7 @@ void BackgroundLayer::Impl::update(gfx::Context& context, } const auto evaluated = unevaluated->evaluate(evalParameters); + // TODO: If background is solid, we can skip drawables and rely on the clear color //const auto passes = eval.get() == 0.0f // ? RenderPass::None // : (!uneval.get().isUndefined() @@ -127,10 +128,9 @@ void BackgroundLayer::Impl::update(gfx::Context& context, } ++iter; - // If the color evaluated to a new value, emit a change request updating all vertexes of - // the existing drawable to the new color. + // If the color evaluated to a new value, update all vertexes of the drawable to the new color if (colorChange) { - changes.emplace_back(std::make_unique(drawable->getId(), *color)); + drawable->resetColor(*color); } }