summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/render_layer.hpp
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-07-05 16:51:39 +0300
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-07-05 16:51:39 +0300
commita2f0e0662470a4433a8d09384a2d727b544de945 (patch)
treef4374338e4a824fd7b359e0c937e9fd8ed7477e6 /src/mbgl/renderer/render_layer.hpp
parentda3b7749b05af842797e83d3b3815ae3d8ab79bf (diff)
downloadqtlocation-mapboxgl-a2f0e0662470a4433a8d09384a2d727b544de945.tar.gz
[core] Introduce LayerRenderItem
Diffstat (limited to 'src/mbgl/renderer/render_layer.hpp')
-rw-r--r--src/mbgl/renderer/render_layer.hpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/mbgl/renderer/render_layer.hpp b/src/mbgl/renderer/render_layer.hpp
index 11c7587893..6837d22072 100644
--- a/src/mbgl/renderer/render_layer.hpp
+++ b/src/mbgl/renderer/render_layer.hpp
@@ -1,10 +1,12 @@
#pragma once
#include <mbgl/layout/layout.hpp>
#include <mbgl/renderer/render_pass.hpp>
+#include <mbgl/renderer/render_tree.hpp>
#include <mbgl/style/layer_properties.hpp>
#include <mbgl/tile/geometry_tile_data.hpp>
#include <mbgl/util/mat4.hpp>
+#include <functional>
#include <memory>
#include <string>
@@ -43,7 +45,31 @@ public:
const TransformState& state;
};
+class LayerRenderItem;
using RenderTiles = std::vector<std::reference_wrapper<const RenderTile>>;
+using LayerUploader = std::function<void(gfx::UploadPass&)>;
+using LayerRenderer = std::function<void(PaintParameters&, const LayerRenderItem&)>;
+
+class LayerRenderItem final : public RenderItem {
+public:
+ LayerRenderItem(RenderTiles, LayerRenderer, LayerUploader, Immutable<style::LayerProperties>, RenderPass);
+ ~LayerRenderItem();
+
+ RenderTiles renderTiles;
+ LayerRenderer renderer;
+ LayerUploader uploader; // optionally initialized.
+ Immutable<style::LayerProperties> evaluatedProperties;
+
+private:
+ bool hasRenderPass(RenderPass pass) const override { return bool(renderPass & pass); }
+ void upload(gfx::UploadPass& pass) const override { if (uploader) uploader(pass);}
+ void render(PaintParameters& parameters) const override {
+ assert(renderer);
+ renderer(parameters, *this);
+ }
+ const std::string& getName() const override { return evaluatedProperties->baseImpl->id; }
+ RenderPass renderPass;
+};
class RenderLayer {
protected:
@@ -52,6 +78,7 @@ protected:
public:
virtual ~RenderLayer() = default;
+ LayerRenderItem createRenderItem();
// Begin transitions for any properties that have changed since the last frame.
virtual void transition(const TransitionParameters&) = 0;
@@ -112,6 +139,8 @@ public:
virtual optional<Color> getSolidBackground() const;
protected:
+ virtual LayerRenderer createRenderer();
+ virtual LayerUploader createUploader();
// Checks whether the current hardware can render this layer. If it can't, we'll show a warning
// in the console to inform the developer.
void checkRenderability(const PaintParameters&, uint32_t activeBindingCount);