diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-06-14 09:07:52 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-06-25 12:53:52 +0300 |
commit | 4283c9bb34fb9e015ccee7037b2000f416439eca (patch) | |
tree | 53055fa6ec63e9fd059fb2b10e7a7d1dae847f87 /src/mbgl/renderer/render_tree.hpp | |
parent | c09cbaf6e0a62fa39cddf3042afeda5e9fd92a77 (diff) | |
download | qtlocation-mapboxgl-4283c9bb34fb9e015ccee7037b2000f416439eca.tar.gz |
[core] Introduce RenderTree
Split orchestration from rendering in the `Renderer::Impl` implementation.
Diffstat (limited to 'src/mbgl/renderer/render_tree.hpp')
-rw-r--r-- | src/mbgl/renderer/render_tree.hpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/mbgl/renderer/render_tree.hpp b/src/mbgl/renderer/render_tree.hpp new file mode 100644 index 0000000000..4266ddec6d --- /dev/null +++ b/src/mbgl/renderer/render_tree.hpp @@ -0,0 +1,78 @@ +#pragma once + +#include <mbgl/renderer/paint_parameters.hpp> + +#include <cassert> +#include <memory> +#include <string> +#include <vector> + +namespace mbgl { + +class PaintParameters; +class PatternAtlas; + +namespace gfx { +class UploadPass; +} // namespace gfx + +class RenderItem { +public: + virtual ~RenderItem() = default; + virtual void upload(gfx::UploadPass&) const = 0; + virtual void render(PaintParameters&) const = 0; + virtual bool hasRenderPass(RenderPass) const = 0; + virtual const std::string& getName() const = 0; +}; + +using RenderItems = std::vector<std::reference_wrapper<const RenderItem>>; + +class RenderTreeParameters { +public: + explicit RenderTreeParameters( + const TransformState& state_, + MapMode mapMode_, + MapDebugOptions debugOptions_, + TimePoint timePoint_, + const EvaluatedLight& light_) + : transformParams(state_), + mapMode(mapMode_), + debugOptions(debugOptions_), + timePoint(timePoint_), + light(light_) { + } + TransformParameters transformParams; + MapMode mapMode; + MapDebugOptions debugOptions; + TimePoint timePoint; + EvaluatedLight light; + bool has3D = false; + Color backgroundColor; + float symbolFadeChange = 0.0f; + bool needsRepaint = false; + bool loaded = false; +}; + +class RenderTree { +public: + virtual ~RenderTree() = default; + // Render items + virtual RenderItems getLayerRenderItems() const = 0; + virtual RenderItems getSourceRenderItems() const = 0; + // Resources + virtual LineAtlas& getLineAtlas() const = 0; + virtual PatternAtlas& getPatternAtlas() const = 0; + // Parameters + const RenderTreeParameters& getParameters() const { + return *parameters; + } +protected: + RenderTree(std::unique_ptr<RenderTreeParameters> parameters_) + : parameters(std::move(parameters_)) { + assert(parameters); + } + std::unique_ptr<RenderTreeParameters> parameters; +}; + + +} // namespace mbgl |