#pragma once #include "drape/pointers.hpp" #include "drape/binding_info.hpp" #include "std/vector.hpp" namespace dp { class AttributeProvider { public: AttributeProvider(uint8_t streamCount, uint32_t vertexCount); /// interface for batcher bool IsDataExists() const; uint32_t GetVertexCount() const; uint8_t GetStreamCount() const; void const * GetRawPointer(uint8_t streamIndex); BindingInfo const & GetBindingInfo(uint8_t streamIndex) const; void Advance(uint32_t vertexCount); void InitStream(uint8_t streamIndex, BindingInfo const & bindingInfo, ref_ptr data); void Reset(uint32_t vertexCount); void UpdateStream(uint8_t streamIndex, ref_ptr data); private: int32_t m_vertexCount; struct AttributeStream { BindingInfo m_binding; ref_ptr m_data; }; vector m_streams; #ifdef DEBUG void CheckStreams() const; void InitCheckStream(uint8_t streamIndex); vector m_checkInfo; #endif }; } // namespace dp