summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/buckets/symbol_bucket.cpp
diff options
context:
space:
mode:
authorAsheem Mamoowala <asheem.mamoowala@mapbox.com>2017-05-12 17:07:48 -0700
committerGitHub <noreply@github.com>2017-05-12 17:07:48 -0700
commit84e39611a096058826dbdb89dccbd1affad05f76 (patch)
tree97ac706e6a1300ad8d2e2293328e693cff10fbb9 /src/mbgl/renderer/buckets/symbol_bucket.cpp
parent83d9226e4f23c630cb0a78bd54783e35ed11fa81 (diff)
downloadqtlocation-mapboxgl-84e39611a096058826dbdb89dccbd1affad05f76.tar.gz
[core] Move renderer/* files into sub-folders (#8983)
Move renderer/* files into sub-folders
Diffstat (limited to 'src/mbgl/renderer/buckets/symbol_bucket.cpp')
-rw-r--r--src/mbgl/renderer/buckets/symbol_bucket.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/mbgl/renderer/buckets/symbol_bucket.cpp b/src/mbgl/renderer/buckets/symbol_bucket.cpp
new file mode 100644
index 0000000000..423161f24c
--- /dev/null
+++ b/src/mbgl/renderer/buckets/symbol_bucket.cpp
@@ -0,0 +1,86 @@
+#include <mbgl/renderer/buckets/symbol_bucket.hpp>
+#include <mbgl/renderer/painter.hpp>
+#include <mbgl/renderer/layers/render_symbol_layer.hpp>
+#include <mbgl/renderer/bucket_parameters.hpp>
+#include <mbgl/style/layers/symbol_layer_impl.hpp>
+
+namespace mbgl {
+
+using namespace style;
+
+SymbolBucket::SymbolBucket(style::SymbolLayoutProperties::PossiblyEvaluated layout_,
+ const std::map<std::string, std::pair<
+ style::IconPaintProperties::Evaluated, style::TextPaintProperties::Evaluated>>& layerPaintProperties,
+ const style::DataDrivenPropertyValue<float>& textSize,
+ const style::DataDrivenPropertyValue<float>& iconSize,
+ float zoom,
+ bool sdfIcons_,
+ bool iconsNeedLinear_)
+ : layout(std::move(layout_)),
+ sdfIcons(sdfIcons_),
+ iconsNeedLinear(iconsNeedLinear_ || iconSize.isDataDriven() || !iconSize.isZoomConstant()),
+ textSizeBinder(SymbolSizeBinder::create(zoom, textSize, TextSize::defaultValue())),
+ iconSizeBinder(SymbolSizeBinder::create(zoom, iconSize, IconSize::defaultValue())) {
+
+ for (const auto& pair : layerPaintProperties) {
+ paintPropertyBinders.emplace(
+ std::piecewise_construct,
+ std::forward_as_tuple(pair.first),
+ std::forward_as_tuple(
+ std::piecewise_construct,
+ std::forward_as_tuple(pair.second.first, zoom),
+ std::forward_as_tuple(pair.second.second, zoom)));
+ }
+}
+
+void SymbolBucket::upload(gl::Context& context) {
+ if (hasTextData()) {
+ text.vertexBuffer = context.createVertexBuffer(std::move(text.vertices));
+ text.indexBuffer = context.createIndexBuffer(std::move(text.triangles));
+ textSizeBinder->upload(context);
+ }
+
+ if (hasIconData()) {
+ icon.vertexBuffer = context.createVertexBuffer(std::move(icon.vertices));
+ icon.indexBuffer = context.createIndexBuffer(std::move(icon.triangles));
+ iconSizeBinder->upload(context);
+ }
+
+ if (!collisionBox.vertices.empty()) {
+ collisionBox.vertexBuffer = context.createVertexBuffer(std::move(collisionBox.vertices));
+ collisionBox.indexBuffer = context.createIndexBuffer(std::move(collisionBox.lines));
+ }
+
+ for (auto& pair : paintPropertyBinders) {
+ pair.second.first.upload(context);
+ pair.second.second.upload(context);
+ }
+
+ uploaded = true;
+}
+
+void SymbolBucket::render(Painter& painter,
+ PaintParameters& parameters,
+ const RenderLayer& layer,
+ const RenderTile& tile) {
+ painter.renderSymbol(parameters, *this, *layer.as<RenderSymbolLayer>(), tile);
+}
+
+bool SymbolBucket::hasData() const {
+ assert(false); // Should be calling SymbolLayout::has{Text,Icon,CollisonBox}Data() instead.
+ return false;
+}
+
+bool SymbolBucket::hasTextData() const {
+ return !text.segments.empty();
+}
+
+bool SymbolBucket::hasIconData() const {
+ return !icon.segments.empty();
+}
+
+bool SymbolBucket::hasCollisionBoxData() const {
+ return !collisionBox.segments.empty();
+}
+
+} // namespace mbgl