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