#pragma once #include "drape_frontend/message_acceptor.hpp" #include "drape_frontend/engine_context.hpp" #include "drape_frontend/viewport.hpp" #include "drape_frontend/map_data_provider.hpp" #include "drape/pointers.hpp" #include "base/thread.hpp" namespace dp { class OGLContextFactory; class TextureManager; } namespace df { class Message; class ThreadsCommutator; class BatchersPool; class ReadManager; class BackendRenderer : public MessageAcceptor { public: BackendRenderer(dp::RefPointer commutator, dp::RefPointer oglcontextfactory, MapDataProvider const & model); ~BackendRenderer() override; private: MapDataProvider m_model; EngineContext m_engineContext; dp::MasterPointer m_batchersPool; dp::MasterPointer m_readManager; ///////////////////////////////////////// // MessageAcceptor // ///////////////////////////////////////// private: void AcceptMessage(dp::RefPointer message); ///////////////////////////////////////// // ThreadPart // ///////////////////////////////////////// private: class Routine : public threads::IRoutine { public: Routine(BackendRenderer & renderer); // threads::IRoutine overrides: void Do() override; private: BackendRenderer & m_renderer; }; void StartThread(); void StopThread(); void ReleaseResources(); void InitGLDependentResource(); void FlushGeometry(dp::TransferPointer message); private: threads::Thread m_selfThread; dp::RefPointer m_commutator; dp::RefPointer m_contextFactory; dp::MasterPointer m_textures; }; } // namespace df