diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2017-04-21 09:19:47 -0700 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2017-04-25 17:23:54 -0700 |
commit | 3c175adf30546fe58713b8fed29ac35a85e150be (patch) | |
tree | 5666e9bcf311ed1b86a13444e50dc7a030c10da9 /src/mbgl/renderer/group_by_layout.cpp | |
parent | ea8ec38df156c6683c886253dbb1f6bc828686ff (diff) | |
download | qtlocation-mapboxgl-3c175adf30546fe58713b8fed29ac35a85e150be.tar.gz |
[core] split off render layers
Diffstat (limited to 'src/mbgl/renderer/group_by_layout.cpp')
-rw-r--r-- | src/mbgl/renderer/group_by_layout.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/mbgl/renderer/group_by_layout.cpp b/src/mbgl/renderer/group_by_layout.cpp new file mode 100644 index 0000000000..df1eb7c7dd --- /dev/null +++ b/src/mbgl/renderer/group_by_layout.cpp @@ -0,0 +1,48 @@ +#include <mbgl/renderer/group_by_layout.hpp> +#include <mbgl/renderer/render_layer.hpp> +#include <mbgl/style/layer_impl.hpp> +#include <mbgl/style/conversion/stringify.hpp> +#include <mbgl/util/rapidjson.hpp> + +#include <rapidjson/writer.h> +#include <rapidjson/stringbuffer.h> + +#include <unordered_map> + +namespace mbgl { + +std::string layoutKey(const RenderLayer& layer) { + using namespace style::conversion; + + rapidjson::StringBuffer s; + rapidjson::Writer<rapidjson::StringBuffer> writer(s); + + writer.StartArray(); + writer.Uint(static_cast<uint32_t>(layer.type)); + writer.String(layer.baseImpl.source); + writer.String(layer.baseImpl.sourceLayer); + writer.Double(layer.baseImpl.minZoom); + writer.Double(layer.baseImpl.maxZoom); + writer.Uint(static_cast<uint32_t>(layer.baseImpl.visibility)); + stringify(writer, layer.baseImpl.filter); + layer.baseImpl.stringifyLayout(writer); + writer.EndArray(); + + return s.GetString(); +} + +std::vector<std::vector<const RenderLayer*>> groupByLayout(const std::vector<std::unique_ptr<RenderLayer>>& layers) { + std::unordered_map<std::string, std::vector<const RenderLayer*>> map; + for (auto& layer : layers) { + map[layoutKey(*layer)].push_back(layer.get()); + } + + std::vector<std::vector<const RenderLayer*>> result; + for (auto& pair : map) { + result.push_back(pair.second); + } + + return result; +} + +} // namespace mbgl |