Program Listing for File Cubemap.hpp

Return to documentation for file (engine/include/Cacao/Cubemap.hpp)

#pragma once

#include "DllHelper.hpp"
#include "Asset.hpp"

#include "libcacaoimage.hpp"

#include <memory>
#include <array>

namespace Cacao {
    class CACAO_API Cubemap final : public Asset {
      public:
        static std::shared_ptr<Cubemap> Create(std::array<libcacaoimage::Image, 6>&& faces, const std::string& addr) {
            return std::shared_ptr<Cubemap>(new Cubemap(std::move(faces), addr));
        }

        Cubemap(const Cubemap&) = delete;
        Cubemap(Cubemap&&);
        Cubemap& operator=(const Cubemap&) = delete;
        Cubemap& operator=(Cubemap&&);

        void Realize();

        std::shared_future<void> RealizeAsync();

        void DropRealized();

        class Impl;

        ~Cubemap();

      private:
        Cubemap(std::array<libcacaoimage::Image, 6>&& faces, const std::string& addr);
        friend class PAL;
        friend class ResourceManager;

        std::unique_ptr<Impl> impl;
        friend class ImplAccessor;
    };
}