#pragma once #include "drape/pointers.hpp" #include #include class ScreenBase; namespace dp { class DebugRenderer; class GraphicsContext; class OverlayHandle; class OverlayTree; class VertexArrayBuffer; class RenderBucket { public: explicit RenderBucket(drape_ptr && buffer); ~RenderBucket(); ref_ptr GetBuffer(); drape_ptr && MoveBuffer(); size_t GetOverlayHandlesCount() const; drape_ptr PopOverlayHandle(); ref_ptr GetOverlayHandle(size_t index); void AddOverlayHandle(drape_ptr && handle); void Update(ScreenBase const & modelView); void CollectOverlayHandles(ref_ptr tree); bool HasOverlayHandles() const; void RemoveOverlayHandles(ref_ptr tree); void SetOverlayVisibility(bool isVisible); void Render(ref_ptr context, bool drawAsLine); // Only for testing! Don't use this function in production code! void RenderDebug(ref_ptr context, ScreenBase const & screen, ref_ptr debugRectRenderer) const; // Only for testing! Don't use this function in production code! template void ForEachOverlay(ToDo const & todo) { for (drape_ptr const & h : m_overlay) todo(make_ref(h)); } void SetFeatureMinZoom(int minZoom); int GetMinZoom() const { return m_featuresMinZoom; } private: void BeforeUpdate(); int m_featuresMinZoom = std::numeric_limits::max(); std::vector> m_overlay; drape_ptr m_buffer; }; } // namespace dp