#pragma once #include "drape/gl_constants.hpp" #include "drape/hw_texture.hpp" #include "std/target_os.hpp" #ifndef OMIM_OS_IPHONE #error Only for iOS #endif #import #import #import namespace dp { class HWTextureAllocatorApple : public HWTextureAllocator { public: HWTextureAllocatorApple(); ~HWTextureAllocatorApple(); CVPixelBufferRef CVCreatePixelBuffer(uint32_t width, uint32_t height, dp::TextureFormat format); void CVDestroyPixelBuffer(CVPixelBufferRef buffer); CVOpenGLESTextureRef CVCreateTexture(CVPixelBufferRef buffer, uint32_t width, uint32_t height, glConst layout, glConst pixelType); void CVDestroyTexture(CVOpenGLESTextureRef texture); void RiseFlushFlag(); drape_ptr CreateTexture(ref_ptr context) override; void Flush() override; private: bool m_needFlush; CVOpenGLESTextureCacheRef m_textureCache; }; class HWTextureApple : public HWTexture { using TBase = HWTexture; public: explicit HWTextureApple(ref_ptr allocator); ~HWTextureApple(); void Create(ref_ptr context, Params const & params, ref_ptr data) override; void UploadData(ref_ptr context, uint32_t x, uint32_t y, uint32_t width, uint32_t height, ref_ptr data) override; void Bind(ref_ptr context) const override; void SetFilter(TextureFilter filter) override; bool Validate() const override; private: void Lock(); void Unlock(); CVPixelBufferRef m_directBuffer; CVOpenGLESTextureRef m_texture; ref_ptr m_allocator; void * m_directPointer; }; } // namespace dp