#pragma once #include #include #include namespace Log { enum class Level { Info, Warning, Error, Debug, VkValidation, DeviceSetup }; // void Message(Level Level, const std::source_location& Location = std::source_location::current(), const std::string& Message); void Message(Level Level, const std::string& Message, const std::source_location& Location); template void Info(const std::string& Format, Args&&... Arguments, const std::source_location& Location = std::source_location::current()) { Message(Level::Info, std::vformat(Format, std::make_format_args(Arguments...)), Location); } template void Warning(const std::string& Format, Args&&... Arguments, const std::source_location& Location = std::source_location::current()) { Message(Level::Warning, std::vformat(Format, std::make_format_args(Arguments...)), Location); } template void Error(const std::string& Format, Args&&... Arguments, const std::source_location& Location = std::source_location::current()) { Message(Level::Error, std::vformat(Format, std::make_format_args(Arguments...)), Location); } template void Debug(const std::string& Format, Args&&... Arguments, const std::source_location& Location = std::source_location::current()) { Message(Level::Warning, std::vformat(Format, std::make_format_args(Arguments...)), Location); } template void Validation(const std::string& Format, Args&&... Arguments, const std::source_location& Location = std::source_location::current()) { Message(Level::VkValidation, std::vformat(Format, std::make_format_args(Arguments...)), Location); } template void DeviceSetup(const std::string& Format, Args&&... Arguments, const std::source_location& Location = std::source_location::current()) { Message(Level::DeviceSetup, std::vformat(Format, std::make_format_args(Arguments...)), Location); } } // namespace Log