Example #1
0
void Map::prepare() {
    view.make_active();

    // Update transform transitions.
    animationTime = util::now();
    if (transform.needsTransition()) {
        transform.updateTransitions(animationTime);
    }

    const TransformState oldState = state;
    state = transform.currentState();

    bool pixelRatioChanged = oldState.getPixelRatio() != state.getPixelRatio();
    bool dimensionsChanged = oldState.getFramebufferWidth() != state.getFramebufferWidth() ||
                             oldState.getFramebufferHeight() != state.getFramebufferHeight();

    if (pixelRatioChanged) {
        style->sprite = std::make_shared<Sprite>(*this, state.getPixelRatio());
        style->sprite->load(kSpriteURL);

        spriteAtlas->resize(state.getPixelRatio());
    }

    if (pixelRatioChanged || dimensionsChanged) {
        painter.clearFramebuffers();
    }

    style->cascade(state.getNormalizedZoom());

    // Update style transitions.
    animationTime = util::now();
    if (style->needsTransition()) {
        style->updateTransitions(animationTime);
        update();
    }

    // Allow the sprite atlas to potentially pull new sprite images if needed.
    if (style->sprite && style->sprite->isLoaded()) {
        spriteAtlas->update(*style->sprite);
    }

    updateTiles();
}