#pragma once #include #include namespace lt::renderer { class IBuffer { public: enum Usage : uint8_t { vertex, index, }; struct CreateInfo { Usage usage; size_t size; std::string debug_name; }; [[nodiscard]] static auto create( Api target_api, class IDevice *device, class IGpu *gpu, const CreateInfo &info ) -> memory::Scope; IBuffer() = default; virtual ~IBuffer() = default; IBuffer(IBuffer &&) = default; IBuffer(const IBuffer &) = delete; auto operator=(IBuffer &&) -> IBuffer & = default; auto operator=(const IBuffer &) -> IBuffer & = delete; [[nodiscard]] virtual auto map() -> std::span = 0; virtual void unmap() = 0; [[nodiscard]] virtual auto get_size() const -> size_t = 0; private: }; } // namespace lt::renderer