#pragma once #include "drape_frontend/gui/layer_render.hpp" #include "drape_frontend/base_renderer.hpp" #include "drape_frontend/batchers_pool.hpp" #include "drape_frontend/drape_api_builder.hpp" #include "drape_frontend/map_data_provider.hpp" #include "drape_frontend/overlay_batcher.hpp" #include "drape_frontend/requested_tiles.hpp" #include "drape_frontend/traffic_generator.hpp" #include "drape_frontend/viewport.hpp" #include "drape/pointers.hpp" namespace dp { class OGLContextFactory; class TextureManager; } namespace df { class Message; class ReadManager; class RouteBuilder; class BackendRenderer : public BaseRenderer { public: using TUpdateCurrentCountryFn = function; struct Params : BaseRenderer::Params { Params(ref_ptr commutator, ref_ptr factory, ref_ptr texMng, MapDataProvider const & model, TUpdateCurrentCountryFn const & updateCurrentCountryFn, ref_ptr requestedTiles, bool allow3dBuildings, bool trafficEnabled, bool simplifiedTrafficColors) : BaseRenderer::Params(commutator, factory, texMng) , m_model(model) , m_updateCurrentCountryFn(updateCurrentCountryFn) , m_requestedTiles(requestedTiles) , m_allow3dBuildings(allow3dBuildings) , m_trafficEnabled(trafficEnabled) , m_simplifiedTrafficColors(simplifiedTrafficColors) {} MapDataProvider const & m_model; TUpdateCurrentCountryFn m_updateCurrentCountryFn; ref_ptr m_requestedTiles; bool m_allow3dBuildings; bool m_trafficEnabled; bool m_simplifiedTrafficColors; }; BackendRenderer(Params && params); ~BackendRenderer() override; void Teardown(); protected: unique_ptr CreateRoutine() override; void OnContextCreate() override; void OnContextDestroy() override; private: void RecacheGui(gui::TWidgetsInitInfo const & initInfo, bool needResetOldGui); void RecacheChoosePositionMark(); void RecacheMapShapes(); #ifdef RENRER_DEBUG_INFO_LABELS void RecacheDebugLabels(); #endif void AcceptMessage(ref_ptr message) override; class Routine : public threads::IRoutine { public: Routine(BackendRenderer & renderer); void Do() override; private: BackendRenderer & m_renderer; }; void ReleaseResources(); void InitGLDependentResource(); void FlushGeometry(TileKey const & key, dp::GLState const & state, drape_ptr && buffer); void FlushTrafficRenderData(TrafficRenderData && renderData); void CleanupOverlays(TileKey const & tileKey); MapDataProvider m_model; drape_ptr> m_batchersPool; drape_ptr m_readManager; drape_ptr m_routeBuilder; drape_ptr m_trafficGenerator; drape_ptr m_drapeApiBuilder; gui::LayerCacher m_guiCacher; ref_ptr m_requestedTiles; TOverlaysRenderData m_overlays; TUpdateCurrentCountryFn m_updateCurrentCountryFn; #ifdef DEBUG bool m_isTeardowned; #endif }; } // namespace df