#pragma once #include "ShaderTypes.h" #include #include #include #include class ShaderPackageCatalog { public: struct Snapshot { std::map packagesById; std::vector packageOrder; }; bool Scan(const std::filesystem::path& shaderRoot, unsigned maxTemporalHistoryFrames, std::string& error); Snapshot CaptureSnapshot() const; bool HasCatalogChangedSince(const Snapshot& snapshot) const; bool HasPackageChangedSince(const Snapshot& snapshot, const std::string& shaderId) const; bool HasPackage(const std::string& shaderId) const; const ShaderPackage* FindPackage(const std::string& shaderId) const; bool CopyPackage(const std::string& shaderId, ShaderPackage& shaderPackage) const; const std::vector& PackageOrder() const; const std::vector& PackageStatuses() const; private: static bool PackagesEquivalent(const ShaderPackage& left, const ShaderPackage& right); static bool TextureAssetsEqual(const std::vector& left, const std::vector& right); static bool FontAssetsEqual(const std::vector& left, const std::vector& right); std::map mPackagesById; std::vector mPackageOrder; std::vector mPackageStatuses; };