# 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 ;
public slots :
void updatePosition ( QMapbox : : Coordinate position , float bearing ) ;
void updateRoute ( QList < QGeoCoordinate > coordinates ) ;
void msgUpdate ( ) ;
} ;