openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.2 KiB

// Copyright (C) 2023 MapLibre contributors
// Copyright (C) 2019 Mapbox, Inc.
// SPDX-License-Identifier: BSD-2-Clause
#pragma once
#include "map.hpp"
#include "map_observer_p.hpp"
#include "map_renderer_p.hpp"
#include <mbgl/actor/actor.hpp>
#include <mbgl/map/map.hpp>
#include <mbgl/renderer/renderer_frontend.hpp>
#include <mbgl/storage/resource_transform.hpp>
#include <mbgl/util/geo.hpp>
#include <QtCore/QObject>
#include <QtCore/QSize>
#include <atomic>
#include <memory>
namespace QMapLibre {
class MapPrivate : public QObject, public mbgl::RendererFrontend {
Q_OBJECT
public:
explicit MapPrivate(Map *map, const Settings &settings, const QSize &size, qreal pixelRatio);
~MapPrivate() override;
// mbgl::RendererFrontend implementation.
void reset() final {}
void setObserver(mbgl::RendererObserver &observer) final;
void update(std::shared_ptr<mbgl::UpdateParameters> parameters) final;
// These need to be called on the same thread.
void createRenderer();
void destroyRenderer();
void render();
void setFramebufferObject(quint32 fbo, const QSize &size);
using PropertySetter = std::optional<mbgl::style::conversion::Error> (mbgl::style::Layer::*)(
const std::string &, const mbgl::style::conversion::Convertible &);
[[nodiscard]] bool setProperty(const PropertySetter &setter,
const QString &layerId,
const QString &name,
const QVariant &value) const;
mbgl::EdgeInsets margins;
std::unique_ptr<mbgl::Map> mapObj{};
public slots:
void requestRendering();
signals:
void needsRendering();
private:
Q_DISABLE_COPY(MapPrivate)
std::recursive_mutex m_mapRendererMutex;
std::shared_ptr<mbgl::RendererObserver> m_rendererObserver{};
std::shared_ptr<mbgl::UpdateParameters> m_updateParameters{};
std::unique_ptr<MapObserver> m_mapObserver{};
std::unique_ptr<MapRenderer> m_mapRenderer{};
std::unique_ptr<mbgl::Actor<mbgl::ResourceTransform::TransformCallback>> m_resourceTransform{};
Settings::GLContextMode m_mode;
qreal m_pixelRatio;
QString m_localFontFamily;
std::atomic_flag m_renderQueued = ATOMIC_FLAG_INIT;
};
} // namespace QMapLibre