#include #include #include #include namespace mbgl { namespace style { void SymbolLayer::Impl::cascade(const CascadeParameters& parameters) { paint.cascade(parameters); } bool SymbolLayer::Impl::evaluate(const PropertyEvaluationParameters& parameters) { paint.evaluate(parameters); // text-size and icon-size are layout properties but they also need to be evaluated as paint properties: iconSize = layout.evaluate(parameters); textSize = layout.evaluate(parameters); passes = ((paint.evaluated.get() > 0 && (paint.evaluated.get().a > 0 || paint.evaluated.get().a > 0) && iconSize > 0) || (paint.evaluated.get() > 0 && (paint.evaluated.get().a > 0 || paint.evaluated.get().a > 0) && textSize > 0)) ? RenderPass::Translucent : RenderPass::None; return paint.hasTransition(); } std::unique_ptr SymbolLayer::Impl::createBucket(BucketParameters&, const GeometryTileLayer&) const { assert(false); // Should be calling createLayout() instead. return nullptr; } std::unique_ptr SymbolLayer::Impl::createLayout(BucketParameters& parameters, const GeometryTileLayer& layer, std::vector> group) const { PropertyEvaluationParameters p(parameters.tileID.overscaledZ); SymbolLayoutProperties::Evaluated evaluated = layout.evaluate(p); if (evaluated.get() == AlignmentType::Auto) { if (evaluated.get() == SymbolPlacementType::Line) { evaluated.get() = AlignmentType::Map; } else { evaluated.get() = AlignmentType::Viewport; } } if (evaluated.get() == AlignmentType::Auto) { if (evaluated.get() == SymbolPlacementType::Line) { evaluated.get() = AlignmentType::Map; } else { evaluated.get() = AlignmentType::Viewport; } } // If unspecified `text-pitch-alignment` inherits `text-rotation-alignment` if (evaluated.get() == AlignmentType::Auto) { evaluated.get() = evaluated.get(); } float textMaxSize = layout.evaluate(PropertyEvaluationParameters(18)); evaluated.get() = layout.evaluate(PropertyEvaluationParameters(p.z + 1)); evaluated.get() = layout.evaluate(PropertyEvaluationParameters(p.z + 1)); return std::make_unique(std::move(group), layer.getName(), parameters.tileID.overscaleFactor(), parameters.tileID.overscaledZ, parameters.mode, layer, filter, evaluated, textMaxSize, *spriteAtlas); } SymbolPropertyValues SymbolLayer::Impl::iconPropertyValues(const SymbolLayoutProperties::Evaluated& layout_) const { return SymbolPropertyValues { layout_.get(), // icon-pitch-alignment is not yet implemented; inherit the rotation alignment layout_.get(), layout_.get(), paint.evaluated.get(), paint.evaluated.get(), paint.evaluated.get(), paint.evaluated.get(), paint.evaluated.get(), paint.evaluated.get(), paint.evaluated.get(), iconSize, 1.0f }; } SymbolPropertyValues SymbolLayer::Impl::textPropertyValues(const SymbolLayoutProperties::Evaluated& layout_) const { return SymbolPropertyValues { layout_.get(), layout_.get(), layout_.get(), paint.evaluated.get(), paint.evaluated.get(), paint.evaluated.get(), paint.evaluated.get(), paint.evaluated.get(), paint.evaluated.get(), paint.evaluated.get(), textSize, 24.0f }; } } // namespace style } // namespace mbgl