#pragma once #include "drape/texture.hpp" #include "drape/glconstants.hpp" namespace dp { template class DynamicTexture : public Texture { public: virtual ~DynamicTexture() { ASSERT(m_indexer.IsNull(), ()); } virtual RefPointer FindResource(Key const & key) const { ASSERT(!m_indexer.IsNull(), ()); if (key.GetType() != TResourceType) return RefPointer(); return m_indexer->MapResource(static_cast(key)); } virtual void UpdateState() { ASSERT(!m_indexer.IsNull(), ()); Bind(); m_indexer->UploadResources(MakeStackRefPointer(this)); } protected: DynamicTexture() {} struct TextureParams { m2::PointU m_size; dp::TextureFormat m_format; glConst m_minFilter; glConst m_magFilter; }; void Init(RefPointer indexer, TextureParams const & params) { Init(indexer, params, MakeStackRefPointer(nullptr)); } void Init(RefPointer indexer, TextureParams const & params, RefPointer data) { m_indexer = indexer; Create(params.m_size.x, params.m_size.y, params.m_format, data); SetFilterParams(params.m_minFilter, params.m_magFilter); } void Reset() { m_indexer = RefPointer(); } private: mutable RefPointer m_indexer; }; }