#pragma once #include #include #include #include #include #define MBGL_DEFINE_TEXTURE(name_) \ struct name_ { \ using Value = ::mbgl::gfx::TextureBinding; \ static constexpr auto name() { \ return #name_; \ } \ } namespace mbgl { namespace gfx { class TextureResource { protected: TextureResource() = default; public: virtual ~TextureResource() = default; }; class Texture { public: Texture(Size size_, std::unique_ptr&& resource_) : size(std::move(size_)), resource(std::move(resource_)) { } Size size; std::unique_ptr resource; }; class TextureBinding { public: TextureBinding(TextureResource& resource_, TextureFilterType filter_ = TextureFilterType::Nearest, TextureMipMapType mipmap_ = TextureMipMapType::No, TextureWrapType wrapX_ = TextureWrapType::Clamp, TextureWrapType wrapY_ = TextureWrapType::Clamp) : resource(&resource_), filter(filter_), mipmap(mipmap_), wrapX(wrapX_), wrapY(wrapY_) { } TextureResource* resource; TextureFilterType filter; TextureMipMapType mipmap; TextureWrapType wrapX; TextureWrapType wrapY; }; namespace detail { template class TextureBindings; template class TextureBindings> { public: using Type = IndexedTuple, TypeList...>>; }; } // namespace detail template using TextureBindings = typename detail::TextureBindings::Type; } // namespace gfx } // namespace mbgl