[core] Avoid copy construction of PaintPropertyBinders

This commit is contained in:
John Firebaugh
2017-03-02 11:57:37 -08:00
parent cee26ee3c8
commit af3898d980
5 changed files with 22 additions and 10 deletions

View File

@@ -13,8 +13,10 @@ using namespace style;
CircleBucket::CircleBucket(const BucketParameters& parameters, const std::vector<const Layer*>& layers)
: mode(parameters.mode) {
for (const auto& layer : layers) {
paintPropertyBinders.emplace(layer->getID(),
CircleProgram::PaintPropertyBinders(
paintPropertyBinders.emplace(
std::piecewise_construct,
std::forward_as_tuple(layer->getID()),
std::forward_as_tuple(
layer->as<CircleLayer>()->impl->paint.evaluated,
parameters.tileID.overscaledZ));
}

View File

@@ -29,8 +29,10 @@ struct GeometryTooLongException : std::exception {};
FillBucket::FillBucket(const BucketParameters& parameters, const std::vector<const Layer*>& layers) {
for (const auto& layer : layers) {
paintPropertyBinders.emplace(layer->getID(),
FillProgram::PaintPropertyBinders(
paintPropertyBinders.emplace(
std::piecewise_construct,
std::forward_as_tuple(layer->getID()),
std::forward_as_tuple(
layer->as<FillLayer>()->impl->paint.evaluated,
parameters.tileID.overscaledZ));
}

View File

@@ -18,8 +18,10 @@ LineBucket::LineBucket(const BucketParameters& parameters,
: layout(layout_.evaluate(PropertyEvaluationParameters(parameters.tileID.overscaledZ))),
overscaling(parameters.tileID.overscaleFactor()) {
for (const auto& layer : layers) {
paintPropertyBinders.emplace(layer->getID(),
LineProgram::PaintPropertyBinders(
paintPropertyBinders.emplace(
std::piecewise_construct,
std::forward_as_tuple(layer->getID()),
std::forward_as_tuple(
layer->as<LineLayer>()->impl->paint.evaluated,
parameters.tileID.overscaledZ));
}

View File

@@ -18,10 +18,13 @@ SymbolBucket::SymbolBucket(style::SymbolLayoutProperties::Evaluated layout_,
sdfIcons(sdfIcons_),
iconsNeedLinear(iconsNeedLinear_) {
for (const auto& pair : layerPaintProperties) {
paintPropertyBinders.emplace(pair.first, std::make_pair(
SymbolIconProgram::PaintPropertyBinders(pair.second.first, zoom),
SymbolSDFTextProgram::PaintPropertyBinders(pair.second.second, zoom)
));
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)));
}
}

View File

@@ -188,6 +188,9 @@ public:
(void)z; // Workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56958
}
PaintPropertyBinders(PaintPropertyBinders&&) = default;
PaintPropertyBinders(const PaintPropertyBinders&) = delete;
void populateVertexVectors(const GeometryTileFeature& feature, std::size_t length) {
util::ignore({
(binders.template get<Ps>()->populateVertexVector(feature, length), 0)...