#pragma once #include "drape/pointers.hpp" #include "std/function.hpp" #include "std/limits.hpp" class ScreenBase; namespace df { class BatchMergeHelper; } namespace dp { class OverlayHandle; class OverlayTree; class VertexArrayBuffer; class RenderBucket { friend class df::BatchMergeHelper; public: 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); void RemoveOverlayHandles(ref_ptr tree); void Render(bool drawAsLine); // Only for testing! Don't use this function in production code! void RenderDebug(ScreenBase const & screen) 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: int m_featuresMinZoom = numeric_limits::max(); vector > m_overlay; drape_ptr m_buffer; }; } // namespace dp