#pragma once #include #include namespace mbgl { namespace vulkan { class UniformBuffer final : public gfx::UniformBuffer { public: UniformBuffer(BufferResource&&); UniformBuffer(const UniformBuffer&) = delete; UniformBuffer(UniformBuffer&&); ~UniformBuffer() override; const BufferResource& getBufferResource() const { return buffer; } UniformBuffer clone() const { return {buffer.clone()}; } void update(const void* data, std::size_t size_) override; protected: BufferResource buffer; }; /// Stores a collection of uniform buffers by name class UniformBufferArray final : public gfx::UniformBufferArray { public: UniformBufferArray() = default; UniformBufferArray(UniformBufferArray&& other) : gfx::UniformBufferArray(std::move(other)) {} UniformBufferArray(const UniformBufferArray&) = delete; UniformBufferArray& operator=(UniformBufferArray&& other) { gfx::UniformBufferArray::operator=(std::move(other)); return *this; } UniformBufferArray& operator=(const UniformBufferArray& other) { gfx::UniformBufferArray::operator=(other); return *this; } private: gfx::UniqueUniformBuffer copy(const gfx::UniformBuffer& buffer) override { return std::make_unique(static_cast(buffer).clone()); } }; } // namespace vulkan } // namespace mbgl