Program Listing for File Shader.hpp

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

#pragma once

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

#include "libcacaoasset.hpp"

namespace Cacao {
    class CACAO_API Shader : public Asset {
      public:
        static std::shared_ptr<Shader> Create(std::vector<unsigned char>&& shaderIR, libcacaoasset::Shader::Descriptor desc, const std::string& addr);

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

        libcacaoasset::Shader::Descriptor GetDescriptor();

        void Bake() override;

        void Discard() override;

        class Impl;

        ~Shader();

      private:
        Shader(std::vector<unsigned char>&& shaderIR, libcacaoasset::Shader::Descriptor desc, const std::string& addr);
        friend class ResourceManager;
        friend class PAL;

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