# 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 ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;