mirror of https://github.com/1okko/openpilot.git
59 lines
1.4 KiB
C++
59 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <memory>
|
|
|
|
#include <QOpenGLContext>
|
|
#include <QMapboxGL>
|
|
#include <QTimer>
|
|
#include <QGeoCoordinate>
|
|
#include <QOpenGLBuffer>
|
|
#include <QOffscreenSurface>
|
|
#include <QOpenGLFunctions>
|
|
#include <QOpenGLFramebufferObject>
|
|
|
|
#include "cereal/visionipc/visionipc_server.h"
|
|
#include "cereal/messaging/messaging.h"
|
|
|
|
|
|
class MapRenderer : public QObject {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
MapRenderer(const QMapboxGLSettings &, bool online=true);
|
|
uint8_t* getImage();
|
|
void update();
|
|
bool loaded();
|
|
~MapRenderer();
|
|
|
|
private:
|
|
std::unique_ptr<QOpenGLContext> ctx;
|
|
std::unique_ptr<QOffscreenSurface> surface;
|
|
std::unique_ptr<QOpenGLFunctions> gl_functions;
|
|
std::unique_ptr<QOpenGLFramebufferObject> fbo;
|
|
|
|
std::unique_ptr<VisionIpcServer> vipc_server;
|
|
std::unique_ptr<PubMaster> pm;
|
|
std::unique_ptr<SubMaster> sm;
|
|
void publish(const double render_time, const bool loaded);
|
|
void sendThumbnail(const uint64_t ts, const kj::Array<capnp::byte> &buf);
|
|
|
|
QMapboxGLSettings m_settings;
|
|
QScopedPointer<QMapboxGL> m_map;
|
|
|
|
void initLayers();
|
|
|
|
uint32_t frame_id = 0;
|
|
uint64_t last_llk_rendered = 0;
|
|
bool rendered() {
|
|
return last_llk_rendered == (*sm)["liveLocationKalman"].getLogMonoTime();
|
|
}
|
|
|
|
QTimer* timer;
|
|
bool ever_loaded = false;
|
|
|
|
public slots:
|
|
void updatePosition(QMapbox::Coordinate position, float bearing);
|
|
void updateRoute(QList<QGeoCoordinate> coordinates);
|
|
void msgUpdate();
|
|
};
|