#ifndef VOXEL_SPRITE_RENDERER_HPP_
#define VOXEL_SPRITE_RENDERER_HPP_

#include <Vk/DescriptorSet/DescriptorSet.hpp>
#include <memory>
#include <vector>

#include <VoxelSprite/VoxelSprite.hpp>
#include <Model/Model.hpp>

/**
 * @brief Class for rendering voxel sprites into other forms.
 */
class VoxelSpriteRenderer
{
private:
    size_t bufferSize;
    std::shared_ptr<Vk::Buffer> stagingBuffer;
    std::shared_ptr<Vk::Buffer> deviceLocalBuffer;
    std::shared_ptr<Vk::DescriptorSet> descSet;

public:
    /**
     * @brief Construct the renderer for the specified sprite.
     */
    VoxelSpriteRenderer(VoxelSprite &sprite);

    /**
     * @brief Make and return the model.
     */
    std::shared_ptr<Model> makeModel();
};

#endif