diff --git a/include/Nazara/Core/AppFilesystemComponent.inl b/include/Nazara/Core/AppFilesystemComponent.inl index febea9d9b..36688b195 100644 --- a/include/Nazara/Core/AppFilesystemComponent.inl +++ b/include/Nazara/Core/AppFilesystemComponent.inl @@ -105,7 +105,7 @@ namespace Nz using Param = std::decay_t; if constexpr (std::is_base_of_v) { - NazaraError(std::string(assetPath) + " is a directory"); + NazaraError("{} is a directory", assetPath); return false; } else if constexpr (std::is_same_v) @@ -136,7 +136,7 @@ namespace Nz using Param = std::decay_t; if constexpr (std::is_base_of_v) { - NazaraError(std::string(assetPath) + " is a directory"); + NazaraError("{} is a directory", assetPath); return false; } else if constexpr (std::is_same_v) diff --git a/include/Nazara/Core/Enums.hpp b/include/Nazara/Core/Enums.hpp index 1363f8447..eb4204b3f 100644 --- a/include/Nazara/Core/Enums.hpp +++ b/include/Nazara/Core/Enums.hpp @@ -30,14 +30,10 @@ namespace Nz enum class ErrorMode { - None, - Silent, - SilentDisabled, ThrowException, - ThrowExceptionDisabled, - Max = ThrowExceptionDisabled + Max = ThrowException }; template<> @@ -48,6 +44,8 @@ namespace Nz using ErrorModeFlags = Flags; + constexpr ErrorModeFlags ErrorMode_Default = {}; + enum class ErrorType { AssertFailed, diff --git a/include/Nazara/Core/Error.hpp b/include/Nazara/Core/Error.hpp index 20e9d37ca..b03619935 100644 --- a/include/Nazara/Core/Error.hpp +++ b/include/Nazara/Core/Error.hpp @@ -10,17 +10,18 @@ #include #include #include +#include #include #if NAZARA_CORE_ENABLE_ASSERTS || defined(NAZARA_DEBUG) - #define NazaraAssert(a, err) if (!(a)) Nz::Error::Trigger(Nz::ErrorType::AssertFailed, err, __LINE__, __FILE__, NAZARA_PRETTY_FUNCTION) + #define NazaraAssert(a, ...) if NAZARA_UNLIKELY(!(a)) Nz::Error::Trigger(Nz::ErrorType::AssertFailed, __LINE__, __FILE__, NAZARA_PRETTY_FUNCTION, __VA_ARGS__) #else - #define NazaraAssert(a, err) for (;;) break + #define NazaraAssert(a, ...) for (;;) break #endif -#define NazaraError(err) Nz::Error::Trigger(Nz::ErrorType::Normal, err, __LINE__, __FILE__, NAZARA_PRETTY_FUNCTION) -#define NazaraInternalError(err) Nz::Error::Trigger(Nz::ErrorType::Internal, err, __LINE__, __FILE__, NAZARA_PRETTY_FUNCTION) -#define NazaraWarning(err) Nz::Error::Trigger(Nz::ErrorType::Warning, err, __LINE__, __FILE__, NAZARA_PRETTY_FUNCTION) +#define NazaraError(...) Nz::Error::Trigger(Nz::ErrorType::Normal, __LINE__, __FILE__, NAZARA_PRETTY_FUNCTION, __VA_ARGS__) +#define NazaraInternalError(...) Nz::Error::Trigger(Nz::ErrorType::Internal, __LINE__, __FILE__, NAZARA_PRETTY_FUNCTION, __VA_ARGS__) +#define NazaraWarning(...) Nz::Error::Trigger(Nz::ErrorType::Warning, __LINE__, __FILE__, NAZARA_PRETTY_FUNCTION, __VA_ARGS__) namespace Nz { @@ -30,25 +31,22 @@ namespace Nz Error() = delete; ~Error() = delete; + static constexpr std::string_view GetCurrentFileRelativeToEngine(std::string_view file); static ErrorModeFlags GetFlags(); - static std::string GetLastError(const char** file = nullptr, unsigned int* line = nullptr, const char** function = nullptr); + static std::string GetLastError(std::string_view* file = nullptr, unsigned int* line = nullptr, std::string_view* function = nullptr); static unsigned int GetLastSystemErrorCode(); static std::string GetLastSystemError(unsigned int code = GetLastSystemErrorCode()); static void SetFlags(ErrorModeFlags flags); - static void Trigger(ErrorType type, std::string error); - static void Trigger(ErrorType type, std::string error, unsigned int line, const char* file, const char* function); + template static void Trigger(ErrorType type, std::string_view error, Args&&... args); + template static void Trigger(ErrorType type, unsigned int line, std::string_view file, std::string_view function, std::string_view error, Args&&... args); private: - static const char* GetCurrentFileRelativeToEngine(const char* file); - - static ErrorModeFlags s_flags; - static std::string s_lastError; - static const char* s_lastErrorFunction; - static const char* s_lastErrorFile; - static unsigned int s_lastErrorLine; + static void TriggerInternal(ErrorType type, std::string error, unsigned int line, std::string_view file, std::string_view function); }; } +#include + #endif // NAZARA_CORE_ERROR_HPP diff --git a/include/Nazara/Core/Error.inl b/include/Nazara/Core/Error.inl new file mode 100644 index 000000000..6566e3565 --- /dev/null +++ b/include/Nazara/Core/Error.inl @@ -0,0 +1,29 @@ +// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com) +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +namespace Nz +{ + constexpr std::string_view Error::GetCurrentFileRelativeToEngine(std::string_view file) + { + if (std::size_t offset = file.find("NazaraEngine/"); offset != file.npos) + return file.substr(offset); + + if (std::size_t offset = file.find("NazaraEngine\\"); offset != file.npos) + return file.substr(offset); + + return file; + } + + template + void Error::Trigger(ErrorType type, std::string_view error, Args&&... args) + { + return TriggerInternal(type, Format(error, std::forward(args)...), 0, {}, {}); + } + + template + void Error::Trigger(ErrorType type, unsigned int line, std::string_view file, std::string_view function, std::string_view error, Args&&... args) + { + return TriggerInternal(type, Format(error, std::forward(args)...), line, GetCurrentFileRelativeToEngine(file), function); + } +} diff --git a/include/Nazara/Core/ErrorFlags.hpp b/include/Nazara/Core/ErrorFlags.hpp index 892a19bd2..156567424 100644 --- a/include/Nazara/Core/ErrorFlags.hpp +++ b/include/Nazara/Core/ErrorFlags.hpp @@ -16,14 +16,14 @@ namespace Nz class NAZARA_CORE_API ErrorFlags { public: - ErrorFlags(ErrorModeFlags flags, bool replace = false); + ErrorFlags(ErrorModeFlags orFlags, ErrorModeFlags andFlags = {}); ErrorFlags(const ErrorFlags&) = delete; ErrorFlags(ErrorFlags&&) = delete; ~ErrorFlags(); ErrorModeFlags GetPreviousFlags() const; - void SetFlags(ErrorModeFlags flags, bool replace = false); + void SetFlags(ErrorModeFlags orFlags, ErrorModeFlags andFlags = {}); ErrorFlags& operator=(const ErrorFlags&) = delete; ErrorFlags& operator=(ErrorFlags&&) = delete; diff --git a/include/Nazara/Core/Log.hpp b/include/Nazara/Core/Log.hpp index 0db129b40..8c009eb9d 100644 --- a/include/Nazara/Core/Log.hpp +++ b/include/Nazara/Core/Log.hpp @@ -15,12 +15,12 @@ #include #ifdef NAZARA_DEBUG - #define NazaraDebug(txt) NazaraNotice(txt) + #define NazaraDebug(...) NazaraNotice(__VA_ARGS__) #else - #define NazaraDebug(txt) + #define NazaraDebug(...) #endif -#define NazaraNotice(txt) Nz::Log::Write(txt) +#define NazaraNotice(...) Nz::Log::Write(__VA_ARGS__) namespace Nz { @@ -39,7 +39,8 @@ namespace Nz static void SetLogger(AbstractLogger* logger); - static void Write(std::string_view string); + static void Write(std::string_view str); + template static void Write(std::string_view str, Args&&... args); static void WriteError(ErrorType type, std::string_view error, unsigned int line = 0, const char* file = nullptr, const char* function = nullptr); NazaraStaticSignal(OnLogWrite, const std::string_view& /*string*/); @@ -54,4 +55,6 @@ namespace Nz }; } +#include + #endif // NAZARA_CORE_LOG_HPP diff --git a/include/Nazara/Core/Log.inl b/include/Nazara/Core/Log.inl new file mode 100644 index 000000000..c181b355f --- /dev/null +++ b/include/Nazara/Core/Log.inl @@ -0,0 +1,17 @@ +// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com) +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include + +namespace Nz +{ + template + void Log::Write(std::string_view str, Args&&... args) + { + return Write(Format(str, std::forward(args)...)); + } +} + +#include diff --git a/include/Nazara/Core/ObjectLibrary.inl b/include/Nazara/Core/ObjectLibrary.inl index e848f196a..de63ca7d0 100644 --- a/include/Nazara/Core/ObjectLibrary.inl +++ b/include/Nazara/Core/ObjectLibrary.inl @@ -35,7 +35,7 @@ namespace Nz { std::shared_ptr ref = Query(name); if (!ref) - NazaraError("Object \"" + name + "\" is not present"); + NazaraError("Object \"{}\" is not present", name); return ref; } diff --git a/include/Nazara/Core/ResourceLoader.inl b/include/Nazara/Core/ResourceLoader.inl index 4bac401f7..7ed86aa47 100644 --- a/include/Nazara/Core/ResourceLoader.inl +++ b/include/Nazara/Core/ResourceLoader.inl @@ -66,7 +66,7 @@ namespace Nz std::string ext = ToLower(PathToString(filePath.extension())); if (ext.empty()) { - NazaraError("Failed to get file extension from \"" + PathToString(filePath) + '"'); + NazaraError("failed to get file extension from \"{0}\"", filePath); return nullptr; } @@ -93,7 +93,7 @@ namespace Nz { if (!file.Open(OpenMode::ReadOnly)) { - NazaraError("failed to load resource: unable to open \"" + PathToString(filePath) + '"'); + NazaraError("failed to load resource: unable to open \"{0}\"", filePath); return nullptr; } } @@ -121,9 +121,9 @@ namespace Nz } if (found) - NazaraError("failed to load resource from file \"" + PathToString(filePath) + "\": all loaders failed"); + NazaraError("failed to load resource from file \"{0}}\": all loaders failed", filePath); else - NazaraError("failed to load resource from file \"" + PathToString(filePath) + "\": no loader found for extension \"" + ext + '"'); + NazaraError("failed to load resource from file \"{0}}\": no loader found for extension \"{1}\"", ext); return nullptr; } @@ -139,9 +139,9 @@ namespace Nz template std::shared_ptr ResourceLoader::LoadFromMemory(const void* data, std::size_t size, const Parameters& parameters) const { - NazaraAssert(data, "Invalid data pointer"); - NazaraAssert(size, "No data to load"); - NazaraAssert(parameters.IsValid(), "Invalid parameters"); + NazaraAssert(data, "invalid data pointer"); + NazaraAssert(size, "no data to load"); + NazaraAssert(parameters.IsValid(), "invalid parameters"); MemoryView stream(data, size); diff --git a/include/Nazara/Core/ResourceManager.inl b/include/Nazara/Core/ResourceManager.inl index a35af9c77..f8f9b7de4 100644 --- a/include/Nazara/Core/ResourceManager.inl +++ b/include/Nazara/Core/ResourceManager.inl @@ -50,11 +50,11 @@ namespace Nz std::shared_ptr resource = m_loader.LoadFromFile(absolutePath, GetDefaultParameters()); if (!resource) { - NazaraError("Failed to load resource from file: " + PathToString(absolutePath)); + NazaraError("failed to load resource from file: {0}", absolutePath); return std::shared_ptr(); } - NazaraDebug("Loaded resource from file " + PathToString(absolutePath)); + NazaraDebug("loaded resource from file {0}", absolutePath); it = m_resources.insert(std::make_pair(absolutePath, resource)).first; } diff --git a/include/Nazara/Core/ResourceSaver.inl b/include/Nazara/Core/ResourceSaver.inl index fbcf2eb48..629383aee 100644 --- a/include/Nazara/Core/ResourceSaver.inl +++ b/include/Nazara/Core/ResourceSaver.inl @@ -69,7 +69,7 @@ namespace Nz std::string extension = ToLower(PathToString(filePath.extension())); if (extension.empty()) { - NazaraError("Failed to get file extension from \"" + PathToString(filePath) + '"'); + NazaraError("failed to get file extension from \"{0}\"", filePath); return false; } @@ -93,7 +93,7 @@ namespace Nz if (!file.Open(OpenMode::WriteOnly | OpenMode::Truncate)) { - NazaraError("failed to save to file: unable to open \"" + PathToString(filePath) + "\" in write mode"); + NazaraError("failed to save to file: unable to open \"{0}\" in write mode", filePath); return false; } @@ -107,7 +107,7 @@ namespace Nz if (found) NazaraError("failed to save resource: all savers failed"); else - NazaraError("failed to save resource: no saver found for extension \"" + extension + '"'); + NazaraError("failed to save resource: no saver found for extension \"extension\"", extension); return false; } @@ -152,7 +152,7 @@ namespace Nz if (found) NazaraError("failed to save resource: all savers failed"); else - NazaraError("failed to save resource: no saver found for format \"" + format + '"'); + NazaraError("failed to save resource: no saver found for format \"{0}\"", format); return false; } diff --git a/include/Nazara/Core/ToString.hpp b/include/Nazara/Core/ToString.hpp new file mode 100644 index 000000000..6711a2976 --- /dev/null +++ b/include/Nazara/Core/ToString.hpp @@ -0,0 +1,90 @@ +// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com) +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NAZARA_CORE_TOSTRING_HPP +#define NAZARA_CORE_TOSTRING_HPP + +#include +#include +#include +#include +#include + +namespace Nz +{ + template std::string Format(std::string_view str, Args&&... args); + + template decltype(auto) ToString(T&& value); + + template + struct ToStringFormatter + { + static_assert(AlwaysFalse(), "ToStringFormatter is not implemented for this type"); + }; + + template<> + struct NAZARA_CORE_API ToStringFormatter + { + static std::string Format(const std::filesystem::path& path); + }; + + template<> + struct ToStringFormatter + { + static const std::string& Format(const std::string& value); + static std::string Format(std::string&& value); + }; + + template<> + struct ToStringFormatter + { + static std::string Format(std::string_view value); + }; + + template<> + struct ToStringFormatter + { + static std::string_view Format(const char* value); + template static std::string_view Format(const char(&str)[N]); + }; + + // Specializations declared in .inl +#define NAZARA_TO_STRING_INLINE_SPEC(Type) \ + template<> \ + struct ToStringFormatter \ + { \ + static std::string Format(Type value); \ + } + + NAZARA_TO_STRING_INLINE_SPEC(short); + NAZARA_TO_STRING_INLINE_SPEC(int); + NAZARA_TO_STRING_INLINE_SPEC(long); + NAZARA_TO_STRING_INLINE_SPEC(long long); + NAZARA_TO_STRING_INLINE_SPEC(unsigned short); + NAZARA_TO_STRING_INLINE_SPEC(unsigned int); + NAZARA_TO_STRING_INLINE_SPEC(unsigned long); + NAZARA_TO_STRING_INLINE_SPEC(unsigned long long); + +#undef NAZARA_TO_STRING_INLINE_SPEC + + // Specializations declared in .cpp +#define NAZARA_TO_STRING_CPP_SPEC(Type) \ + template<> \ + struct NAZARA_CORE_API ToStringFormatter \ + { \ + static std::string Format(Type value); \ + } + + NAZARA_TO_STRING_CPP_SPEC(float); + NAZARA_TO_STRING_CPP_SPEC(double); + NAZARA_TO_STRING_CPP_SPEC(long double); + +#undef NAZARA_TO_STRING_CPP_SPEC +} + +#include + +#endif // NAZARA_CORE_TOSTRING_HPP diff --git a/include/Nazara/Core/ToString.inl b/include/Nazara/Core/ToString.inl new file mode 100644 index 000000000..b12858948 --- /dev/null +++ b/include/Nazara/Core/ToString.inl @@ -0,0 +1,88 @@ +// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com) +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#ifdef NAZARA_BUILD +#include +#include +#endif + +#include + +namespace Nz +{ + namespace Detail + { + NAZARA_CORE_API std::string FormatFallback(std::string_view str); + NAZARA_CORE_API std::string FormatFallback(std::string_view str, std::string_view param1); + NAZARA_CORE_API std::string FormatFallback(std::string_view str, std::string_view param1, std::string_view param2); + NAZARA_CORE_API std::string FormatFallback(std::string_view str, std::string_view param1, std::string_view param2, std::string_view param3); + NAZARA_CORE_API std::string FormatFallback(std::string_view str, std::string_view param1, std::string_view param2, std::string_view param3, std::string_view param4); + NAZARA_CORE_API std::string FormatFallback(std::string_view str, std::string_view param1, std::string_view param2, std::string_view param3, std::string_view param4, std::string_view param5); + } + + template + std::string Format(std::string_view str, Args&&... args) + { +#ifdef NAZARA_BUILD + return fmt::format(str, std::forward(args)...); +#else + return Detail::FormatFallback(str, ToString(args)...); +#endif + } + + + template + decltype(auto) ToString(T&& value) + { + return ToStringFormatter>::Format(std::forward(value)); + } + + + inline const std::string& ToStringFormatter::Format(const std::string& value) + { + return value; + } + + inline std::string ToStringFormatter::Format(std::string&& value) + { + return value; + } + + + inline std::string ToStringFormatter::Format(std::string_view value) + { + return std::string(value); + } + + + inline std::string_view ToStringFormatter::Format(const char* value) + { + return std::string_view(value); + } + + template + inline std::string_view ToStringFormatter::Format(const char(&str)[N]) + { + return std::string_view(str, N); + } + +#define NAZARA_TO_STRING_STD_SPEC(Type) \ + inline std::string ToStringFormatter::Format(Type value) \ + { \ + return std::to_string(value); \ + } + + NAZARA_TO_STRING_STD_SPEC(short); + NAZARA_TO_STRING_STD_SPEC(int); + NAZARA_TO_STRING_STD_SPEC(long); + NAZARA_TO_STRING_STD_SPEC(long long); + NAZARA_TO_STRING_STD_SPEC(unsigned short); + NAZARA_TO_STRING_STD_SPEC(unsigned int); + NAZARA_TO_STRING_STD_SPEC(unsigned long); + NAZARA_TO_STRING_STD_SPEC(unsigned long long); + +#undef NAZARA_TO_STRING_STD_SPEC +} + +#include diff --git a/include/Nazara/Graphics/Material.inl b/include/Nazara/Graphics/Material.inl index bcdf82df3..a2a72e0b2 100644 --- a/include/Nazara/Graphics/Material.inl +++ b/include/Nazara/Graphics/Material.inl @@ -73,7 +73,7 @@ namespace Nz case nzsl::ImageType::Cubemap: return ImageType::Cubemap; } - NazaraError("invalid image type 0x" + NumberToString(UnderlyingCast(imageType), 16)); + NazaraError("invalid image type 0x{0}", NumberToString(UnderlyingCast(imageType), 16)); return ImageType::E2D; } } diff --git a/include/Nazara/Graphics/MaterialInstance.inl b/include/Nazara/Graphics/MaterialInstance.inl index dd63c3a51..5febd8e57 100644 --- a/include/Nazara/Graphics/MaterialInstance.inl +++ b/include/Nazara/Graphics/MaterialInstance.inl @@ -53,7 +53,7 @@ namespace Nz std::size_t propertyIndex = FindTextureProperty(propertyName); if (propertyIndex == MaterialSettings::InvalidPropertyIndex) { - NazaraError("material has no texture property named " + std::string(propertyName)); + NazaraError("material has no texture property named \"{0}\"", propertyName); return nullptr; } @@ -79,7 +79,7 @@ namespace Nz std::size_t propertyIndex = FindTextureProperty(propertyName); if (propertyIndex == MaterialSettings::InvalidPropertyIndex) { - NazaraError("material has no texture property named " + std::string(propertyName)); + NazaraError("material has no texture property named \"{0}\"", propertyName); return nullptr; } @@ -97,7 +97,7 @@ namespace Nz std::size_t propertyIndex = FindValueProperty(propertyName); if (propertyIndex == MaterialSettings::InvalidPropertyIndex) { - NazaraError("material has no value property named " + std::string(propertyName)); + NazaraError("material has no value property named \"{0}\"", propertyName); return nullptr; } @@ -128,7 +128,7 @@ namespace Nz std::size_t propertyIndex = FindTextureProperty(propertyName); if (propertyIndex == MaterialSettings::InvalidPropertyIndex) { - NazaraError("material has no texture property named " + std::string(propertyName)); + NazaraError("material has no texture property named \"{0}\"", propertyName); return; } @@ -140,7 +140,7 @@ namespace Nz std::size_t propertyIndex = FindTextureProperty(propertyName); if (propertyIndex == MaterialSettings::InvalidPropertyIndex) { - NazaraError("material has no texture property named " + std::string(propertyName)); + NazaraError("material has no texture property named \"{0}\"", propertyName); return; } @@ -152,7 +152,7 @@ namespace Nz std::size_t propertyIndex = FindTextureProperty(propertyName); if (propertyIndex == MaterialSettings::InvalidPropertyIndex) { - NazaraError("material has no texture property named " + std::string(propertyName)); + NazaraError("material has no texture property named \"{0}\"", propertyName); return; } @@ -164,7 +164,7 @@ namespace Nz std::size_t propertyIndex = FindValueProperty(propertyName); if (propertyIndex == MaterialSettings::InvalidPropertyIndex) { - NazaraError("material has no value property named " + std::string(propertyName)); + NazaraError("material has no value property named \"{0}\"", propertyName); return; } diff --git a/include/Nazara/Math/BoundingVolume.inl b/include/Nazara/Math/BoundingVolume.inl index 4cbac0263..3d5cea6f8 100644 --- a/include/Nazara/Math/BoundingVolume.inl +++ b/include/Nazara/Math/BoundingVolume.inl @@ -363,7 +363,7 @@ namespace Nz } // If we arrive here, the extent is invalid - NazaraError("Invalid extent type (From) (0x" + NumberToString(UnderlyingCast(from.extent), 16) + ')'); + NazaraError("Invalid extent type (From) ({0:#x})", UnderlyingCast(from.extent)); return Null(); } @@ -390,13 +390,13 @@ namespace Nz } // If we arrive here, the extent is invalid - NazaraError("Invalid extent type (From) (0x" + NumberToString(UnderlyingCast(from.extent), 16) + ')'); + NazaraError("Invalid extent type (From) ({0:#x})", UnderlyingCast(from.extent)); return Null(); } } // If we arrive here, the extent is invalid - NazaraError("Invalid extent type (To) (0x" + NumberToString(UnderlyingCast(to.extent), 16) + ')'); + NazaraError("Invalid extent type (To) ({0:#x})", UnderlyingCast(to.extent)); return Null(); } diff --git a/include/Nazara/Math/Box.hpp b/include/Nazara/Math/Box.hpp index 1909666b6..7d6a0dce7 100644 --- a/include/Nazara/Math/Box.hpp +++ b/include/Nazara/Math/Box.hpp @@ -7,12 +7,12 @@ #ifndef NAZARA_MATH_BOX_HPP #define NAZARA_MATH_BOX_HPP -#include #include #include #include #include #include +#include #include namespace Nz diff --git a/include/Nazara/Math/Box.inl b/include/Nazara/Math/Box.inl index f556a02fa..8f8a92df1 100644 --- a/include/Nazara/Math/Box.inl +++ b/include/Nazara/Math/Box.inl @@ -305,7 +305,7 @@ namespace Nz return Vector3(x + width, y + height, z + depth); } - NazaraError("Corner not handled (0x" + NumberToString(UnderlyingCast(corner), 16) + ')'); + NazaraError("Corner not handled ({0:#x})", UnderlyingCast(corner)); return Vector3(); } diff --git a/include/Nazara/Math/Frustum.inl b/include/Nazara/Math/Frustum.inl index bb64af403..92595614c 100644 --- a/include/Nazara/Math/Frustum.inl +++ b/include/Nazara/Math/Frustum.inl @@ -116,7 +116,7 @@ namespace Nz return false; } - NazaraError("Invalid intersection side (0x" + NumberToString(UnderlyingCast(side), 16) + ')'); + NazaraError("Invalid intersection side ({0:#x})", UnderlyingCast(side)); return false; } @@ -127,7 +127,7 @@ namespace Nz return false; } - NazaraError("Invalid extent type (0x" + NumberToString(UnderlyingCast(volume.extent), 16) + ')'); + NazaraError("Invalid extent type ({0:#x})", UnderlyingCast(volume.extent)); return false; } @@ -281,7 +281,7 @@ namespace Nz return IntersectionSide::Outside; } - NazaraError("Invalid intersection side (0x" + NumberToString(UnderlyingCast(side), 16) + ')'); + NazaraError("Invalid intersection side ({0:#x})", UnderlyingCast(side)); return IntersectionSide::Outside; } @@ -292,7 +292,7 @@ namespace Nz return IntersectionSide::Outside; } - NazaraError("Invalid extent type (0x" + NumberToString(UnderlyingCast(volume.extent), 16) + ')'); + NazaraError("Invalid extent type ({0:#x})", UnderlyingCast(volume.extent)); return IntersectionSide::Outside; } diff --git a/include/Nazara/Math/Plane.inl b/include/Nazara/Math/Plane.inl index bb971899a..0c1ea4bdd 100644 --- a/include/Nazara/Math/Plane.inl +++ b/include/Nazara/Math/Plane.inl @@ -221,22 +221,11 @@ namespace Nz * \param to Target plane * \param interpolation Factor of interpolation * - * \remark interpolation is meant to be between 0 and 1, other values are potentially undefined behavior - * \remark With NAZARA_DEBUG, a NazaraError is thrown and Plane() is returned - * * \see Lerp */ template constexpr Plane Plane::Lerp(const Plane& from, const Plane& to, T interpolation) { - #ifdef NAZARA_DEBUG - if (interpolation < T(0.0) || interpolation > T(1.0)) - { - NazaraError("Interpolation must be in range [0..1] (Got " + NumberToString(interpolation) + ')'); - return Plane(); - } - #endif - Plane plane; plane.distance = Nz::Lerp(from.distance, to.distance, interpolation); plane.normal = Vector3::Lerp(from.normal, to.normal, interpolation); diff --git a/include/Nazara/Math/Quaternion.inl b/include/Nazara/Math/Quaternion.inl index f40080e30..8e3b35ea5 100644 --- a/include/Nazara/Math/Quaternion.inl +++ b/include/Nazara/Math/Quaternion.inl @@ -603,14 +603,6 @@ namespace Nz template constexpr Quaternion Quaternion::Lerp(const Quaternion& from, const Quaternion& to, T interpolation) { - #ifdef NAZARA_DEBUG - if (interpolation < T(0.0) || interpolation > T(1.0)) - { - NazaraError("Interpolation must be in range [0..1] (Got " + NumberToString(interpolation) + ')'); - return Zero(); - } - #endif - Quaternion interpolated; interpolated.w = Nz::Lerp(from.w, to.w, interpolation); interpolated.x = Nz::Lerp(from.x, to.x, interpolation); @@ -717,22 +709,11 @@ namespace Nz * \param to Target quaternion * \param interpolation Factor of interpolation * - * \remark interpolation is meant to be between 0 and 1, other values are potentially undefined behavior - * \remark With NAZARA_DEBUG, a NazaraError is thrown and Zero() is returned - * * \see Lerp */ template Quaternion Quaternion::Slerp(const Quaternion& from, const Quaternion& to, T interpolation) { - #ifdef NAZARA_DEBUG - if (interpolation < T(0.0) || interpolation > T(1.0)) - { - NazaraError("Interpolation must be in range [0..1] (Got " + std::to_string(interpolation) + ')'); - return Zero(); - } - #endif - Quaternion q; T cosOmega = from.DotProduct(to); diff --git a/include/Nazara/Math/Ray.inl b/include/Nazara/Math/Ray.inl index ffd192ecb..f1daa7d00 100644 --- a/include/Nazara/Math/Ray.inl +++ b/include/Nazara/Math/Ray.inl @@ -200,7 +200,7 @@ namespace Nz return false; } - NazaraError("Invalid extent type (0x" + NumberToString(UnderlyingCast(volume.extent), 16) + ')'); + NazaraError("Invalid extent type ({0:#x})", UnderlyingCast(volume.extent)); return false; } diff --git a/include/Nazara/Math/Rect.hpp b/include/Nazara/Math/Rect.hpp index d67333497..1fa6fa697 100644 --- a/include/Nazara/Math/Rect.hpp +++ b/include/Nazara/Math/Rect.hpp @@ -7,9 +7,9 @@ #ifndef NAZARA_MATH_RECT_HPP #define NAZARA_MATH_RECT_HPP -#include #include #include +#include #include namespace Nz diff --git a/include/Nazara/Math/Rect.inl b/include/Nazara/Math/Rect.inl index 45898f488..2cc0e19c6 100644 --- a/include/Nazara/Math/Rect.inl +++ b/include/Nazara/Math/Rect.inl @@ -246,7 +246,7 @@ namespace Nz return Vector2(x + width, y); } - NazaraError("Corner not handled (0x" + NumberToString(UnderlyingCast(corner), 16) + ')'); + NazaraError("Corner not handled ({0:#x})", UnderlyingCast(corner)); return Vector2(); } diff --git a/include/Nazara/Math/Sphere.inl b/include/Nazara/Math/Sphere.inl index f77956b30..3dc46d5fc 100644 --- a/include/Nazara/Math/Sphere.inl +++ b/include/Nazara/Math/Sphere.inl @@ -478,22 +478,11 @@ namespace Nz * \param to Target sphere * \param interpolation Factor of interpolation * - * \remark interpolation is meant to be between 0 and 1, other values are potentially undefined behavior - * \remark With NAZARA_DEBUG, a NazaraError is thrown and Zero() is returned - * * \see Lerp */ template constexpr Sphere Sphere::Lerp(const Sphere& from, const Sphere& to, T interpolation) { - #ifdef NAZARA_DEBUG - if (interpolation < T(0.0) || interpolation > T(1.0)) - { - NazaraError("Interpolation must be in range [0..1] (Got " + NumberToString(interpolation) + ')'); - return Zero(); - } - #endif - Sphere sphere; sphere.x = Nz::Lerp(from.x, to.x, interpolation); sphere.y = Nz::Lerp(from.y, to.y, interpolation); diff --git a/include/Nazara/OpenGLRenderer/Utils.inl b/include/Nazara/OpenGLRenderer/Utils.inl index 3d6491f4b..1836ea1e6 100644 --- a/include/Nazara/OpenGLRenderer/Utils.inl +++ b/include/Nazara/OpenGLRenderer/Utils.inl @@ -42,7 +42,7 @@ namespace Nz default: break; } - NazaraError("Unhandled PixelFormat 0x" + NumberToString(UnderlyingCast(pixelFormat), 16)); + NazaraError("unhandled PixelFormat {0:#x})", UnderlyingCast(pixelFormat)); return {}; } @@ -57,7 +57,7 @@ namespace Nz case BlendEquation::Subtract: return GL_FUNC_SUBTRACT; } - NazaraError("Unhandled BlendEquation 0x" + NumberToString(UnderlyingCast(blendEquation), 16)); + NazaraError("unhandled BlendEquation {0:#x})", UnderlyingCast(blendEquation)); return {}; } @@ -81,7 +81,7 @@ namespace Nz case BlendFunc::Zero: return GL_ZERO; } - NazaraError("Unhandled BlendFunc 0x" + NumberToString(UnderlyingCast(blendFunc), 16)); + NazaraError("unhandled BlendFunc {0:#x})", UnderlyingCast(blendFunc)); return {}; } @@ -94,7 +94,7 @@ namespace Nz case FaceFilling::Point: return GL_POINT; } - NazaraError("Unhandled FaceFilling 0x" + NumberToString(UnderlyingCast(side), 16)); + NazaraError("unhandled FaceFilling {0:#x})", UnderlyingCast(side)); return {}; } @@ -110,7 +110,7 @@ namespace Nz case FaceCulling::FrontAndBack: return GL_FRONT_AND_BACK; } - NazaraError("Unhandled FaceSide 0x" + NumberToString(UnderlyingCast(side), 16)); + NazaraError("unhandled FaceSide {0:#x})", UnderlyingCast(side)); return {}; } @@ -122,7 +122,7 @@ namespace Nz case FrontFace::CounterClockwise: return GL_CCW; } - NazaraError("Unhandled FrontFace 0x" + NumberToString(UnderlyingCast(face), 16)); + NazaraError("unhandled FrontFace {0:#x})", UnderlyingCast(face)); return {}; } @@ -135,7 +135,7 @@ namespace Nz case IndexType::U32: return GL_UNSIGNED_INT; } - NazaraError("Unhandled IndexType 0x" + NumberToString(UnderlyingCast(indexType), 16)); + NazaraError("unhandled IndexType {0:#x})", UnderlyingCast(indexType)); return {}; } @@ -151,7 +151,7 @@ namespace Nz case PrimitiveMode::TriangleFan: return GL_TRIANGLE_FAN; } - NazaraError("Unhandled PrimitiveMode 0x" + NumberToString(UnderlyingCast(primitiveMode), 16)); + NazaraError("unhandled PrimitiveMode {0:#x})", UnderlyingCast(primitiveMode)); return {}; } @@ -169,7 +169,7 @@ namespace Nz case RendererComparison::NotEqual: return GL_NOTEQUAL; } - NazaraError("Unhandled RendererComparison 0x" + NumberToString(UnderlyingCast(comparison), 16)); + NazaraError("unhandled RendererComparison {0:#x})", UnderlyingCast(comparison)); return {}; } @@ -181,7 +181,7 @@ namespace Nz case SamplerFilter::Nearest: return GL_NEAREST; } - NazaraError("Unhandled SamplerFilter 0x" + NumberToString(UnderlyingCast(filter), 16)); + NazaraError("unhandled SamplerFilter {0:#x})", UnderlyingCast(filter)); return {}; } @@ -197,7 +197,7 @@ namespace Nz case SamplerMipmapMode::Nearest: return GL_LINEAR_MIPMAP_NEAREST; } - NazaraError("Unhandled SamplerFilter 0x" + NumberToString(UnderlyingCast(mipmapFilter), 16)); + NazaraError("unhandled SamplerFilter {0:#x})", UnderlyingCast(mipmapFilter)); return {}; } @@ -209,12 +209,12 @@ namespace Nz case SamplerMipmapMode::Nearest: return GL_NEAREST_MIPMAP_NEAREST; } - NazaraError("Unhandled SamplerFilter 0x" + NumberToString(UnderlyingCast(mipmapFilter), 16)); + NazaraError("unhandled SamplerFilter {0:#x})", UnderlyingCast(mipmapFilter)); return {}; } } - NazaraError("Unhandled SamplerFilter 0x" + NumberToString(UnderlyingCast(minFilter), 16)); + NazaraError("unhandled SamplerFilter {0:#x})", UnderlyingCast(minFilter)); return {}; } @@ -227,7 +227,7 @@ namespace Nz case SamplerWrap::Repeat: return GL_REPEAT; } - NazaraError("Unhandled SamplerWrap 0x" + NumberToString(UnderlyingCast(wrapMode), 16)); + NazaraError("unhandled SamplerWrap {0:#x})", UnderlyingCast(wrapMode)); return {}; } @@ -240,7 +240,7 @@ namespace Nz case nzsl::ShaderStageType::Vertex: return GL_VERTEX_SHADER; } - NazaraError("Unhandled nzsl::ShaderStageType 0x" + NumberToString(UnderlyingCast(stageType), 16)); + NazaraError("unhandled nzsl::ShaderStageType {0:#x})", UnderlyingCast(stageType)); return {}; } @@ -258,7 +258,7 @@ namespace Nz case StencilOperation::Zero: return GL_ZERO; } - NazaraError("Unhandled StencilOperation 0x" + NumberToString(UnderlyingCast(stencilOp), 16)); + NazaraError("unhandled StencilOperation {0:#x})", UnderlyingCast(stencilOp)); return {}; } @@ -271,7 +271,7 @@ namespace Nz case TextureAccess::WriteOnly: return GL_WRITE_ONLY; } - NazaraError("Unhandled TextureAccess 0x" + NumberToString(UnderlyingCast(textureAccess), 16)); + NazaraError("unhandled TextureAccess {0:#x})", UnderlyingCast(textureAccess)); return {}; } @@ -290,7 +290,7 @@ namespace Nz case GL::BufferTarget::Uniform: return GL_UNIFORM_BUFFER; } - NazaraError("Unhandled GL::BufferTarget 0x" + NumberToString(UnderlyingCast(bufferTarget), 16)); + NazaraError("unhandled GL::BufferTarget {0:#x})", UnderlyingCast(bufferTarget)); return {}; } @@ -310,7 +310,7 @@ namespace Nz case GL::TextureTarget::Target3D: return GL_TEXTURE_3D; } - NazaraError("Unhandled GL::TextureTarget 0x" + NumberToString(UnderlyingCast(textureTarget), 16)); + NazaraError("unhandled GL::TextureTarget {0:#x})", UnderlyingCast(textureTarget)); return {}; } } diff --git a/include/Nazara/Platform/Window.inl b/include/Nazara/Platform/Window.inl index 7e5ef981e..748d294d1 100644 --- a/include/Nazara/Platform/Window.inl +++ b/include/Nazara/Platform/Window.inl @@ -14,14 +14,14 @@ namespace Nz inline Window::Window(VideoMode mode, const std::string& title, WindowStyleFlags style) : Window() { - ErrorFlags flags(ErrorMode::ThrowException, true); + ErrorFlags flags(ErrorMode::ThrowException); Create(mode, title, style); } inline Window::Window(WindowHandle handle) : Window() { - ErrorFlags flags(ErrorMode::ThrowException, true); + ErrorFlags flags(ErrorMode::ThrowException); Create(handle); } diff --git a/include/Nazara/Utility/Formats/MTLParser.inl b/include/Nazara/Utility/Formats/MTLParser.inl index 92269b7e7..591955759 100644 --- a/include/Nazara/Utility/Formats/MTLParser.inl +++ b/include/Nazara/Utility/Formats/MTLParser.inl @@ -53,7 +53,7 @@ namespace Nz inline void MTLParser::Error(const std::string& message) { - NazaraError(message + " at line #" + std::to_string(m_lineCount)); + NazaraError("{0} at line #{1}", message, m_lineCount); } inline void MTLParser::Flush() const @@ -64,7 +64,7 @@ namespace Nz inline void MTLParser::Warning(const std::string& message) { - NazaraWarning(message + " at line #" + std::to_string(m_lineCount)); + NazaraWarning("{0} at line #{1}", message, m_lineCount); } inline void MTLParser::UnrecognizedLine(bool error) diff --git a/include/Nazara/Utility/Formats/OBJParser.inl b/include/Nazara/Utility/Formats/OBJParser.inl index ca55780bb..5ce686dc2 100644 --- a/include/Nazara/Utility/Formats/OBJParser.inl +++ b/include/Nazara/Utility/Formats/OBJParser.inl @@ -153,7 +153,7 @@ namespace Nz inline void OBJParser::Error(const std::string& message) { - NazaraError(message + " at line #" + std::to_string(m_lineCount)); + NazaraError("{0} at line #{1}", message, m_lineCount); } inline void OBJParser::Flush() const @@ -164,7 +164,7 @@ namespace Nz inline void OBJParser::Warning(const std::string& message) { - NazaraWarning(message + " at line #" + std::to_string(m_lineCount)); + NazaraWarning("{0} at line #{1}", message, m_lineCount); } inline bool OBJParser::UnrecognizedLine(bool error) diff --git a/include/Nazara/Utility/Node.inl b/include/Nazara/Utility/Node.inl index 5aa3de42b..75260ead3 100644 --- a/include/Nazara/Utility/Node.inl +++ b/include/Nazara/Utility/Node.inl @@ -159,7 +159,7 @@ namespace Nz return m_position; } - NazaraError("Coordinate system out of enum (0x" + NumberToString(UnderlyingCast(coordSys), 16) + ')'); + NazaraError("Coordinate system out of enum ({0:#x})", UnderlyingCast(coordSys)); return Vector3f(); } @@ -181,7 +181,7 @@ namespace Nz return m_rotation; } - NazaraError("Coordinate system out of enum (0x" + NumberToString(UnderlyingCast(coordSys), 16) + ')'); + NazaraError("Coordinate system out of enum ({0:#x})", UnderlyingCast(coordSys)); return Quaternionf(); } @@ -197,7 +197,7 @@ namespace Nz return m_scale; } - NazaraError("Coordinate system out of enum (0x" + NumberToString(UnderlyingCast(coordSys), 16) + ')'); + NazaraError("Coordinate system out of enum ({0:#x})", UnderlyingCast(coordSys)); return Vector3f(); } diff --git a/include/Nazara/Utility/PixelFormat.inl b/include/Nazara/Utility/PixelFormat.inl index 817d7aa37..ba42ebd2c 100644 --- a/include/Nazara/Utility/PixelFormat.inl +++ b/include/Nazara/Utility/PixelFormat.inl @@ -200,13 +200,13 @@ namespace Nz ConvertFunction func = s_convertFunctions[srcFormat][dstFormat]; if (!func) { - NazaraError("Pixel format conversion from " + std::string(GetName(srcFormat)) + " to " + std::string(GetName(dstFormat)) + " is not supported"); + NazaraError("pixel format conversion from {0} to {1} is not supported", GetName(srcFormat), GetName(dstFormat)); return false; } if (!func(reinterpret_cast(start), reinterpret_cast(end), reinterpret_cast(dst))) { - NazaraError("Pixel format conversion from " + std::string(GetName(srcFormat)) + " to " + std::string(GetName(dstFormat)) + " failed"); + NazaraError("pixel format conversion from {0} to {1} failed", GetName(srcFormat), GetName(dstFormat)); return false; } diff --git a/include/Nazara/VulkanRenderer/Utils.inl b/include/Nazara/VulkanRenderer/Utils.inl index 7b814dece..c9b32fb5b 100644 --- a/include/Nazara/VulkanRenderer/Utils.inl +++ b/include/Nazara/VulkanRenderer/Utils.inl @@ -55,7 +55,7 @@ namespace Nz case AttachmentLoadOp::Load: return VK_ATTACHMENT_LOAD_OP_LOAD; } - NazaraError("Unhandled AttachmentLoadOp 0x" + NumberToString(UnderlyingCast(loadOp), 16)); + NazaraError("unhandled AttachmentLoadOp {0:#x})", UnderlyingCast(loadOp)); return {}; } @@ -67,7 +67,7 @@ namespace Nz case AttachmentStoreOp::Store: return VK_ATTACHMENT_STORE_OP_STORE; } - NazaraError("Unhandled AttachmentStoreOp 0x" + NumberToString(UnderlyingCast(storeOp), 16)); + NazaraError("unhandled AttachmentStoreOp {0:#x})", UnderlyingCast(storeOp)); return {}; } @@ -82,7 +82,7 @@ namespace Nz case BlendEquation::Subtract: return VK_BLEND_OP_SUBTRACT; } - NazaraError("Unhandled BlendEquation 0x" + NumberToString(UnderlyingCast(blendEquation), 16)); + NazaraError("unhandled BlendEquation {0:#x})", UnderlyingCast(blendEquation)); return {}; } @@ -106,7 +106,7 @@ namespace Nz case BlendFunc::Zero: return VK_BLEND_FACTOR_ZERO; } - NazaraError("Unhandled BlendFunc 0x" + NumberToString(UnderlyingCast(blendFunc), 16)); + NazaraError("unhandled BlendFunc {0:#x})", UnderlyingCast(blendFunc)); return {}; } @@ -121,7 +121,7 @@ namespace Nz case BufferType::Upload: return VK_BUFFER_USAGE_TRANSFER_SRC_BIT; } - NazaraError("Unhandled BufferType 0x" + NumberToString(UnderlyingCast(bufferType), 16)); + NazaraError("unhandled BufferType {0:#x})", UnderlyingCast(bufferType)); return 0; } @@ -144,7 +144,7 @@ namespace Nz case ComponentType::Int4: return VK_FORMAT_R32G32B32A32_SINT; } - NazaraError("Unhandled ComponentType 0x" + NumberToString(UnderlyingCast(componentType), 16)); + NazaraError("unhandled ComponentType {0:#x})", UnderlyingCast(componentType)); return VK_FORMAT_UNDEFINED; } @@ -158,7 +158,7 @@ namespace Nz case FaceCulling::FrontAndBack: return VK_CULL_MODE_FRONT_AND_BACK; } - NazaraError("Unhandled FaceSide 0x" + NumberToString(UnderlyingCast(faceSide), 16)); + NazaraError("unhandled FaceSide {0:#x})", UnderlyingCast(faceSide)); return VK_CULL_MODE_BACK_BIT; } @@ -171,7 +171,7 @@ namespace Nz case FaceFilling::Point: return VK_POLYGON_MODE_POINT; } - NazaraError("Unhandled FaceFilling 0x" + NumberToString(UnderlyingCast(faceFilling), 16)); + NazaraError("unhandled FaceFilling {0:#x})", UnderlyingCast(faceFilling)); return VK_POLYGON_MODE_FILL; } @@ -183,7 +183,7 @@ namespace Nz case FrontFace::CounterClockwise: return VK_FRONT_FACE_COUNTER_CLOCKWISE; } - NazaraError("Unhandled FrontFace 0x" + NumberToString(UnderlyingCast(frontFace), 16)); + NazaraError("unhandled FrontFace {0:#x})", UnderlyingCast(frontFace)); return {}; } @@ -196,7 +196,7 @@ namespace Nz case IndexType::U32: return VK_INDEX_TYPE_UINT32; } - NazaraError("Unhandled IndexType 0x" + NumberToString(UnderlyingCast(indexType), 16)); + NazaraError("unhandled IndexType {0:#x})", UnderlyingCast(indexType)); return {}; } @@ -222,7 +222,7 @@ namespace Nz case MemoryAccess::VertexBufferRead: return VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT; } - NazaraError("Unhandled MemoryAccess 0x" + NumberToString(UnderlyingCast(memoryAccess), 16)); + NazaraError("unhandled MemoryAccess {0:#x})", UnderlyingCast(memoryAccess)); return {}; } @@ -256,7 +256,7 @@ namespace Nz case PipelineStage::BottomOfPipe: return VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; } - NazaraError("Unhandled PipelineStage 0x" + NumberToString(UnderlyingCast(pipelineStage), 16)); + NazaraError("unhandled PipelineStage {0:#x})", UnderlyingCast(pipelineStage)); return {}; } @@ -299,7 +299,7 @@ namespace Nz default: break; } - NazaraError("Unhandled PixelFormat 0x" + NumberToString(UnderlyingCast(pixelFormat), 16)); + NazaraError("unhandled PixelFormat {0:#x})", UnderlyingCast(pixelFormat)); return VK_FORMAT_UNDEFINED; } @@ -316,7 +316,7 @@ namespace Nz case PixelFormatContent::Stencil: return VK_IMAGE_ASPECT_STENCIL_BIT; } - NazaraError("Unhandled PixelFormatContent 0x" + NumberToString(UnderlyingCast(pixelFormatContent), 16)); + NazaraError("unhandled PixelFormatContent {0:#x})", UnderlyingCast(pixelFormatContent)); return VK_IMAGE_ASPECT_COLOR_BIT; } @@ -330,7 +330,7 @@ namespace Nz case PresentMode::VerticalSync: return VK_PRESENT_MODE_FIFO_KHR; } - NazaraError("Unhandled PresentMode 0x" + NumberToString(UnderlyingCast(presentMode), 16)); + NazaraError("unhandled PresentMode {0:#x})", UnderlyingCast(presentMode)); return VK_PRESENT_MODE_FIFO_KHR; } @@ -346,7 +346,7 @@ namespace Nz case PrimitiveMode::TriangleFan: return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN; } - NazaraError("Unhandled PrimitiveMode 0x" + NumberToString(UnderlyingCast(primitiveMode), 16)); + NazaraError("unhandled PrimitiveMode {0:#x})", UnderlyingCast(primitiveMode)); return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; } @@ -364,7 +364,7 @@ namespace Nz case RendererComparison::Always: return VK_COMPARE_OP_ALWAYS; } - NazaraError("Unhandled RendererComparison 0x" + NumberToString(UnderlyingCast(comparison), 16)); + NazaraError("unhandled RendererComparison {0:#x})", UnderlyingCast(comparison)); return VK_COMPARE_OP_NEVER; } @@ -376,7 +376,7 @@ namespace Nz case SamplerFilter::Nearest: return VK_FILTER_NEAREST; } - NazaraError("Unhandled SamplerFilter 0x" + NumberToString(UnderlyingCast(samplerFilter), 16)); + NazaraError("unhandled SamplerFilter {0:#x})", UnderlyingCast(samplerFilter)); return VK_FILTER_NEAREST; } @@ -388,7 +388,7 @@ namespace Nz case SamplerMipmapMode::Nearest: return VK_SAMPLER_MIPMAP_MODE_NEAREST; } - NazaraError("Unhandled SamplerMipmapMode 0x" + NumberToString(UnderlyingCast(samplerMipmap), 16)); + NazaraError("unhandled SamplerMipmapMode {0:#x})", UnderlyingCast(samplerMipmap)); return VK_SAMPLER_MIPMAP_MODE_NEAREST; } @@ -401,7 +401,7 @@ namespace Nz case SamplerWrap::Repeat: return VK_SAMPLER_ADDRESS_MODE_REPEAT; } - NazaraError("Unhandled SamplerWrap 0x" + NumberToString(UnderlyingCast(samplerWrap), 16)); + NazaraError("unhandled SamplerWrap {0:#x})", UnderlyingCast(samplerWrap)); return VK_SAMPLER_ADDRESS_MODE_REPEAT; } @@ -415,7 +415,7 @@ namespace Nz case ShaderBindingType::UniformBuffer: return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; } - NazaraError("Unhandled ShaderBindingType 0x" + NumberToString(UnderlyingCast(bindingType), 16)); + NazaraError("unhandled ShaderBindingType {0:#x})", UnderlyingCast(bindingType)); return VK_DESCRIPTOR_TYPE_SAMPLER; } @@ -428,7 +428,7 @@ namespace Nz case nzsl::ShaderStageType::Vertex: return VK_SHADER_STAGE_VERTEX_BIT; } - NazaraError("Unhandled nzsl::ShaderStageType 0x" + NumberToString(UnderlyingCast(stageType), 16)); + NazaraError("unhandled nzsl::ShaderStageType {0:#x})", UnderlyingCast(stageType)); return {}; } @@ -455,7 +455,7 @@ namespace Nz case StencilOperation::Zero: return VK_STENCIL_OP_ZERO; } - NazaraError("Unhandled StencilOperation 0x" + NumberToString(UnderlyingCast(stencilOp), 16)); + NazaraError("unhandled StencilOperation {0:#x})", UnderlyingCast(stencilOp)); return {}; } @@ -474,7 +474,7 @@ namespace Nz case TextureLayout::Undefined: return VK_IMAGE_LAYOUT_UNDEFINED; } - NazaraError("Unhandled TextureLayout 0x" + NumberToString(UnderlyingCast(textureLayout), 16)); + NazaraError("unhandled TextureLayout {0:#x})", UnderlyingCast(textureLayout)); return {}; } @@ -491,7 +491,7 @@ namespace Nz case TextureUsage::TransferDestination: return VK_IMAGE_USAGE_TRANSFER_DST_BIT; } - NazaraError("Unhandled TextureUsage 0x" + NumberToString(UnderlyingCast(textureLayout), 16)); + NazaraError("unhandled TextureUsage {0:#x})", UnderlyingCast(textureLayout)); return {}; } @@ -512,7 +512,7 @@ namespace Nz case VertexInputRate::Vertex: return VK_VERTEX_INPUT_RATE_VERTEX; } - NazaraError("Unhandled VertexInputRate 0x" + NumberToString(UnderlyingCast(inputRate), 16)); + NazaraError("unhandled VertexInputRate {0:#x})", UnderlyingCast(inputRate)); return {}; } diff --git a/include/Nazara/VulkanRenderer/Wrapper/CommandBuffer.inl b/include/Nazara/VulkanRenderer/Wrapper/CommandBuffer.inl index fedab15e6..05b60aae4 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/CommandBuffer.inl +++ b/include/Nazara/VulkanRenderer/Wrapper/CommandBuffer.inl @@ -36,7 +36,7 @@ namespace Nz m_lastErrorCode = m_pool->GetDevice()->vkBeginCommandBuffer(m_handle, &info); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to begin command buffer: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to begin command buffer: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -321,7 +321,7 @@ namespace Nz m_lastErrorCode = m_pool->GetDevice()->vkEndCommandBuffer(m_handle); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to end command buffer: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to end command buffer: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } diff --git a/include/Nazara/VulkanRenderer/Wrapper/Device.inl b/include/Nazara/VulkanRenderer/Wrapper/Device.inl index d4c139001..9d373f777 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/Device.inl +++ b/include/Nazara/VulkanRenderer/Wrapper/Device.inl @@ -23,7 +23,7 @@ namespace Nz::Vk inline const Device::QueueList& Device::GetEnabledQueues(UInt32 familyQueue) const { - NazaraAssert(familyQueue < m_enabledQueuesInfos.size(), "Invalid family queue"); + NazaraAssert(familyQueue < m_enabledQueuesInfos.size(), "invalid family queue {0}", familyQueue); return *m_queuesByFamily[familyQueue]; } @@ -62,7 +62,7 @@ namespace Nz::Vk { PFN_vkVoidFunction func; { - ErrorFlags errFlags(ErrorMode::ThrowExceptionDisabled); + ErrorFlags errFlags({}, ~ErrorMode::ThrowException); func = m_instance.GetDeviceProcAddr(m_device, name); } @@ -71,7 +71,7 @@ namespace Nz::Vk if (allowInstanceFallback) return m_instance.GetProcAddr(name); - NazaraError("Failed to get " + std::string(name) + " address"); + NazaraError("failed to get {0} address", name); } return func; @@ -126,7 +126,7 @@ namespace Nz::Vk m_lastErrorCode = vkDeviceWaitIdle(m_device); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to wait for device idle: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to wait for device idle: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } diff --git a/include/Nazara/VulkanRenderer/Wrapper/DeviceMemory.inl b/include/Nazara/VulkanRenderer/Wrapper/DeviceMemory.inl index 6fc37d86d..7fa18e838 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/DeviceMemory.inl +++ b/include/Nazara/VulkanRenderer/Wrapper/DeviceMemory.inl @@ -40,7 +40,7 @@ namespace Nz typeMask <<= 1; } - NazaraError("Failed to find a memory type suitable for typeBits: " + NumberToString(typeBits) + " and properties: 0x" + NumberToString(properties, 16)); + NazaraError("failed to find a memory type suitable for typeBits: {0} and properties: 0x{1}", typeBits, NumberToString(properties, 16)); return false; } @@ -62,7 +62,7 @@ namespace Nz m_lastErrorCode = m_device->vkFlushMappedMemoryRanges(*m_device, 1, &memoryRange); if (m_lastErrorCode != VK_SUCCESS) { - NazaraError("Failed to flush memory: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to flush memory: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -85,7 +85,7 @@ namespace Nz m_lastErrorCode = m_device->vkMapMemory(*m_device, m_handle, offset, size, flags, &mappedPtr); if (m_lastErrorCode != VK_SUCCESS) { - NazaraError("Failed to map device memory: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to map device memory: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } diff --git a/include/Nazara/VulkanRenderer/Wrapper/DeviceObject.inl b/include/Nazara/VulkanRenderer/Wrapper/DeviceObject.inl index 67bddb376..745617af7 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/DeviceObject.inl +++ b/include/Nazara/VulkanRenderer/Wrapper/DeviceObject.inl @@ -40,7 +40,7 @@ namespace Nz::Vk m_lastErrorCode = C::CreateHelper(*m_device, &createInfo, allocator, &m_handle); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to create Vulkan device object: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to create Vulkan device object: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } diff --git a/include/Nazara/VulkanRenderer/Wrapper/Fence.inl b/include/Nazara/VulkanRenderer/Wrapper/Fence.inl index 512d824f9..ce0cdcc52 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/Fence.inl +++ b/include/Nazara/VulkanRenderer/Wrapper/Fence.inl @@ -25,7 +25,7 @@ namespace Nz m_lastErrorCode = m_device->vkResetFences(*m_device, 1U, &m_handle); if (m_lastErrorCode != VK_SUCCESS) { - NazaraError("Failed to reset fence: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to reset fence: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -42,7 +42,7 @@ namespace Nz m_lastErrorCode = m_device->vkWaitForFences(*m_device, 1U, &m_handle, VK_TRUE, timeout); if (m_lastErrorCode != VK_SUCCESS && m_lastErrorCode != VK_TIMEOUT) { - NazaraError("Failed to wait for fence: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to wait for fence: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } diff --git a/include/Nazara/VulkanRenderer/Wrapper/Image.inl b/include/Nazara/VulkanRenderer/Wrapper/Image.inl index 475df9aef..23feaaffe 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/Image.inl +++ b/include/Nazara/VulkanRenderer/Wrapper/Image.inl @@ -14,7 +14,7 @@ namespace Nz m_lastErrorCode = m_device->vkBindImageMemory(*m_device, m_handle, memory, offset); if (m_lastErrorCode != VK_SUCCESS) { - NazaraError("Failed to bind image memory: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to bind image memory: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } diff --git a/include/Nazara/VulkanRenderer/Wrapper/Instance.inl b/include/Nazara/VulkanRenderer/Wrapper/Instance.inl index 6e3742c38..e4ebaf6d1 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/Instance.inl +++ b/include/Nazara/VulkanRenderer/Wrapper/Instance.inl @@ -50,7 +50,7 @@ namespace Nz::Vk { PFN_vkVoidFunction func = vkGetDeviceProcAddr(device, name); if (!func) - NazaraError("Failed to get " + std::string(name) + " address"); + NazaraError("failed to get {0} address", name); return func; } @@ -69,7 +69,7 @@ namespace Nz::Vk { PFN_vkVoidFunction func = Loader::GetInstanceProcAddr(m_instance, name); if (!func) - NazaraError("Failed to get " + std::string(name) + " address"); + NazaraError("failed to get {0} address", name); return func; } @@ -120,7 +120,7 @@ namespace Nz::Vk m_lastErrorCode = vkGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, imageFormatProperties); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to get physical device image format properties: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to get physical device image format properties: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } diff --git a/include/Nazara/VulkanRenderer/Wrapper/InstanceObject.inl b/include/Nazara/VulkanRenderer/Wrapper/InstanceObject.inl index 2cae133da..f36c15174 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/InstanceObject.inl +++ b/include/Nazara/VulkanRenderer/Wrapper/InstanceObject.inl @@ -39,7 +39,7 @@ namespace Nz m_lastErrorCode = C::CreateHelper(*m_instance, &createInfo, allocator, &m_handle); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to create Vulkan instance object: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to create Vulkan instance object: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } diff --git a/include/Nazara/VulkanRenderer/Wrapper/Pipeline.inl b/include/Nazara/VulkanRenderer/Wrapper/Pipeline.inl index 2d819933f..58bda07ec 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/Pipeline.inl +++ b/include/Nazara/VulkanRenderer/Wrapper/Pipeline.inl @@ -74,7 +74,7 @@ namespace Nz m_lastErrorCode = result; if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to create Vulkan pipeline: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to create Vulkan pipeline: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } diff --git a/include/Nazara/VulkanRenderer/Wrapper/QueueHandle.inl b/include/Nazara/VulkanRenderer/Wrapper/QueueHandle.inl index 353b3271e..d38fd0bf7 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/QueueHandle.inl +++ b/include/Nazara/VulkanRenderer/Wrapper/QueueHandle.inl @@ -135,7 +135,7 @@ namespace Nz m_lastErrorCode = m_device->vkQueueSubmit(m_handle, submitCount, submits, signalFence); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to submit queue: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to submit queue: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -147,7 +147,7 @@ namespace Nz m_lastErrorCode = m_device->vkQueueWaitIdle(m_handle); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to wait for queue: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to wait for queue: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } diff --git a/include/Nazara/VulkanRenderer/Wrapper/Surface.inl b/include/Nazara/VulkanRenderer/Wrapper/Surface.inl index 4c41f9d2d..14e0cd6b8 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/Surface.inl +++ b/include/Nazara/VulkanRenderer/Wrapper/Surface.inl @@ -177,7 +177,7 @@ namespace Nz::Vk m_lastErrorCode = m_instance.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, m_surface, surfaceCapabilities); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to query surface capabilities: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to query surface capabilities: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -191,7 +191,7 @@ namespace Nz::Vk m_lastErrorCode = m_instance.vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, m_surface, &surfaceCount, nullptr); if (m_lastErrorCode != VkResult::VK_SUCCESS || surfaceCount == 0) { - NazaraError("Failed to query format count: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to query format count: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -200,7 +200,7 @@ namespace Nz::Vk m_lastErrorCode = m_instance.vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, m_surface, &surfaceCount, surfaceFormats->data()); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to query formats: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to query formats: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -223,7 +223,7 @@ namespace Nz::Vk m_lastErrorCode = m_instance.vkGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, m_surface, &presentModeCount, presentModes->data()); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to query present modes: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to query present modes: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -236,7 +236,7 @@ namespace Nz::Vk m_lastErrorCode = m_instance.vkGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, m_surface, &presentationSupported); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to query surface capabilities: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to query surface capabilities: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -291,7 +291,7 @@ namespace Nz::Vk { if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to create Vulkan surface: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to create Vulkan surface: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } diff --git a/include/Nazara/VulkanRenderer/Wrapper/Swapchain.inl b/include/Nazara/VulkanRenderer/Wrapper/Swapchain.inl index 7a25c70cf..2a3e6a58d 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/Swapchain.inl +++ b/include/Nazara/VulkanRenderer/Wrapper/Swapchain.inl @@ -22,7 +22,7 @@ namespace Nz default: { - NazaraError("Failed to acquire next swapchain image: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to acquire next swapchain image: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } } @@ -37,7 +37,7 @@ namespace Nz m_lastErrorCode = m_device->vkGetSwapchainImagesKHR(*m_device, m_handle, &imageCount, nullptr); if (m_lastErrorCode != VkResult::VK_SUCCESS || imageCount == 0) { - NazaraError("Failed to query swapchain image count: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to query swapchain image count: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -45,7 +45,7 @@ namespace Nz m_lastErrorCode = m_device->vkGetSwapchainImagesKHR(*m_device, m_handle, &imageCount, images.data()); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to query swapchain images: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to query swapchain images: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -78,7 +78,7 @@ namespace Nz if (!m_images[i].view.Create(*m_device, imageViewCreateInfo)) { - NazaraError("Failed to create image view for image #" + NumberToString(i)); + NazaraError("failed to create image view for image #{0}", i); return false; } } diff --git a/plugins/Assimp/CustomStream.cpp b/plugins/Assimp/CustomStream.cpp index 2654211ff..ada065793 100644 --- a/plugins/Assimp/CustomStream.cpp +++ b/plugins/Assimp/CustomStream.cpp @@ -82,7 +82,7 @@ aiFile* StreamOpener(aiFileIO* fileIO, const char* filePath, const char* openMod } else { - ErrorFlags errFlags(ErrorMode::ThrowExceptionDisabled, true); + ErrorFlags errFlags({}, ~ErrorMode::ThrowException); ///TODO: Move to File::DecodeOpenMode OpenModeFlags openModeEnum = 0; @@ -107,7 +107,7 @@ aiFile* StreamOpener(aiFileIO* fileIO, const char* filePath, const char* openMod } else { - NazaraError(std::string("Unhandled/Invalid openmode: ") + openMode + std::string(" for file ") + filePath); + NazaraError("unhandled/invalid openmode: {0} for file {1}", openMode, filePath); return nullptr; } diff --git a/plugins/Assimp/Plugin.cpp b/plugins/Assimp/Plugin.cpp index 1b5a5565f..1251c4597 100644 --- a/plugins/Assimp/Plugin.cpp +++ b/plugins/Assimp/Plugin.cpp @@ -157,7 +157,7 @@ bool FindSkeletonRoot(SceneInfo& sceneInfo, const aiNode* node) auto range = sceneInfo.nodeByName.equal_range(node->mName.C_Str()); if (std::distance(range.first, range.second) != 1) { - NazaraError("failed to identify skeleton root node: " + std::to_string(std::distance(range.first, range.second)) + " node(s) matched"); + NazaraError("failed to identify skeleton root node: {0} node(s) matched", std::distance(range.first, range.second)); return false; } @@ -265,7 +265,7 @@ Nz::Result, Nz::ResourceLoadingError> LoadAnimati if (!scene) { - NazaraError("Assimp failed to import file: " + std::string(aiGetErrorString())); + NazaraError("Assimp failed to import file: {0}", aiGetErrorString()); return Nz::Err(Nz::ResourceLoadingError::DecodingError); } @@ -308,7 +308,7 @@ Nz::Result, Nz::ResourceLoadingError> LoadAnimati std::size_t jointIndex = parameters.skeleton->GetJointIndex(nodeAnim->mNodeName.C_Str()); if (jointIndex == Nz::Skeleton::InvalidJointIndex) { - NazaraError("animation references joint " + std::string(nodeAnim->mNodeName.C_Str()) + " which is not part of the skeleton"); + NazaraError("animation references joint {0} which is not part of the skeleton", nodeAnim->mNodeName.C_Str()); continue; } @@ -815,7 +815,7 @@ Nz::Result, Nz::ResourceLoadingError> LoadMesh(Nz::Str if (!scene) { - NazaraError("Assimp failed to import file: " + std::string(aiGetErrorString())); + NazaraError("Assimp failed to import file: {0}", aiGetErrorString()); return Nz::Err(Nz::ResourceLoadingError::DecodingError); } diff --git a/plugins/FFmpeg/Plugin.cpp b/plugins/FFmpeg/Plugin.cpp index 6712a9a08..914a524a6 100644 --- a/plugins/FFmpeg/Plugin.cpp +++ b/plugins/FFmpeg/Plugin.cpp @@ -98,13 +98,13 @@ namespace if (int errCode = avformat_open_input(&m_formatContext, "", nullptr, nullptr); errCode != 0) { - NazaraError("failed to open input: " + ErrorToString(errCode)); + NazaraError("failed to open input: {0}", ErrorToString(errCode)); return Nz::Err(Nz::ResourceLoadingError::Unrecognized); } if (int errCode = avformat_find_stream_info(m_formatContext, nullptr); errCode != 0) { - NazaraError("failed to find stream info: " + ErrorToString(errCode)); + NazaraError("failed to find stream info: {0}", ErrorToString(errCode)); return Nz::Err(Nz::ResourceLoadingError::Unrecognized); } @@ -150,7 +150,7 @@ namespace return false; } - NazaraError("failed to read frame: " + ErrorToString(errCode)); + NazaraError("failed to read frame: {0}", ErrorToString(errCode)); return false; } @@ -159,7 +159,7 @@ namespace if (int errCode = avcodec_send_packet(m_codecContext, &packet); errCode < 0) { - NazaraError("failed to send packet: " + ErrorToString(errCode)); + NazaraError("failed to send packet: {0}", ErrorToString(errCode)); return false; } @@ -168,7 +168,7 @@ namespace if (errCode == AVERROR(EAGAIN)) continue; - NazaraError("failed to receive frame: " + ErrorToString(errCode)); + NazaraError("failed to receive frame: {0}", ErrorToString(errCode)); return false; } @@ -236,13 +236,13 @@ namespace if (int errCode = avcodec_parameters_to_context(m_codecContext, codecParameters); errCode < 0) { - NazaraError("failed to copy codec params to codec context: " + ErrorToString(errCode)); + NazaraError("failed to copy codec params to codec context: {0}", ErrorToString(errCode)); return Nz::Err(Nz::ResourceLoadingError::Internal); } if (int errCode = avcodec_open2(m_codecContext, m_codec, nullptr); errCode < 0) { - NazaraError("could not open codec: " + ErrorToString(errCode)); + NazaraError("could not open codec: {0}", ErrorToString(errCode)); return Nz::Err(Nz::ResourceLoadingError::Internal); } @@ -260,7 +260,7 @@ namespace if (int errCode = av_frame_get_buffer(m_rgbaFrame, 0); errCode < 0) { - NazaraError("failed to open input: " + ErrorToString(errCode)); + NazaraError("failed to open input: {0}", ErrorToString(errCode)); return Nz::Err(Nz::ResourceLoadingError::Internal); } @@ -286,7 +286,7 @@ namespace std::unique_ptr file = std::make_unique(); if (!file->Open(filePath, Nz::OpenMode::ReadOnly)) { - NazaraError("Failed to open stream from file: " + Nz::Error::GetLastError()); + NazaraError("failed to open stream from file: {0}", Nz::Error::GetLastError()); return false; } m_ownedStream = std::move(file); diff --git a/src/Nazara/Audio/Audio.cpp b/src/Nazara/Audio/Audio.cpp index 812ccdfec..4fefc36e3 100644 --- a/src/Nazara/Audio/Audio.cpp +++ b/src/Nazara/Audio/Audio.cpp @@ -72,7 +72,7 @@ namespace Nz if (!config.allowDummyDevice) throw; - NazaraError(std::string("failed to open default OpenAL device: ") + e.what()); + NazaraError("failed to open default OpenAL device: {0}", e.what()); } } diff --git a/src/Nazara/Audio/Formats/drwavLoader.cpp b/src/Nazara/Audio/Formats/drwavLoader.cpp index 916c1b333..bf2e75a78 100644 --- a/src/Nazara/Audio/Formats/drwavLoader.cpp +++ b/src/Nazara/Audio/Formats/drwavLoader.cpp @@ -65,7 +65,7 @@ namespace Nz std::optional formatOpt = GuessAudioFormat(wav.channels); if (!formatOpt) { - NazaraError("unexpected channel count: " + std::to_string(wav.channels)); + NazaraError("unexpected channel count: {0}", wav.channels); return Err(ResourceLoadingError::Unsupported); } @@ -138,7 +138,7 @@ namespace Nz std::unique_ptr file = std::make_unique(); if (!file->Open(filePath, OpenMode::ReadOnly)) { - NazaraError("failed to open stream from file: " + Error::GetLastError()); + NazaraError("failed to open stream from file: {0}", Error::GetLastError()); return Err(ResourceLoadingError::FailedToOpenFile); } @@ -166,7 +166,7 @@ namespace Nz std::optional formatOpt = GuessAudioFormat(m_decoder.channels); if (!formatOpt) { - NazaraError("unexpected channel count: " + std::to_string(m_decoder.channels)); + NazaraError("unexpected channel count: {0}", m_decoder.channels); return Err(ResourceLoadingError::Unsupported); } diff --git a/src/Nazara/Audio/Formats/libflacLoader.cpp b/src/Nazara/Audio/Formats/libflacLoader.cpp index dd1ae7317..16079772b 100644 --- a/src/Nazara/Audio/Formats/libflacLoader.cpp +++ b/src/Nazara/Audio/Formats/libflacLoader.cpp @@ -229,7 +229,7 @@ namespace Nz std::optional formatOpt = GuessAudioFormat(channelCount); if (!formatOpt) { - NazaraError("unexpected channel count: " + std::to_string(channelCount)); + NazaraError("unexpected channel count: {0}", channelCount); return Err(ResourceLoadingError::Unsupported); } @@ -298,7 +298,7 @@ namespace Nz std::unique_ptr file = std::make_unique(); if (!file->Open(filePath, OpenMode::ReadOnly)) { - NazaraError("failed to open stream from file: " + Error::GetLastError()); + NazaraError("failed to open stream from file: {0}", Error::GetLastError()); return Err(ResourceLoadingError::FailedToOpenFile); } @@ -351,7 +351,7 @@ namespace Nz std::optional formatOpt = GuessAudioFormat(m_channelCount); if (!formatOpt) { - NazaraError("unexpected channel count: " + std::to_string(m_channelCount)); + NazaraError("unexpected channel count: {0}", m_channelCount); return Err(ResourceLoadingError::Unrecognized); } diff --git a/src/Nazara/Audio/Formats/libvorbisLoader.cpp b/src/Nazara/Audio/Formats/libvorbisLoader.cpp index 116139a14..b5bedb72c 100644 --- a/src/Nazara/Audio/Formats/libvorbisLoader.cpp +++ b/src/Nazara/Audio/Formats/libvorbisLoader.cpp @@ -103,7 +103,7 @@ namespace Nz if (readBytes < 0) { - NazaraError("an error occurred while reading file: " + VorbisErrToString(readBytes)); + NazaraError("an error occurred while reading file: {0}", VorbisErrToString(readBytes)); return 0; } @@ -139,7 +139,7 @@ namespace Nz std::optional formatOpt = GuessAudioFormat(info->channels); if (!formatOpt) { - NazaraError("unexpected channel count: " + std::to_string(info->channels)); + NazaraError("unexpected channel count: {0}", info->channels); return Err(ResourceLoadingError::Unsupported); } @@ -217,7 +217,7 @@ namespace Nz std::unique_ptr file = std::make_unique(); if (!file->Open(filePath, OpenMode::ReadOnly)) { - NazaraError("failed to open stream from file: " + Error::GetLastError()); + NazaraError("failed to open stream from file: {0}", Error::GetLastError()); return Err(ResourceLoadingError::FailedToOpenFile); } @@ -249,7 +249,7 @@ namespace Nz std::optional formatOpt = GuessAudioFormat(info->channels); if (!formatOpt) { - NazaraError("unexpected channel count: " + std::to_string(info->channels)); + NazaraError("unexpected channel count: {0}", info->channels); return Err(ResourceLoadingError::Unsupported); } diff --git a/src/Nazara/Audio/Formats/minimp3Loader.cpp b/src/Nazara/Audio/Formats/minimp3Loader.cpp index f8f45c572..eb01c3468 100644 --- a/src/Nazara/Audio/Formats/minimp3Loader.cpp +++ b/src/Nazara/Audio/Formats/minimp3Loader.cpp @@ -96,7 +96,7 @@ namespace Nz std::optional formatOpt = GuessAudioFormat(info.channels); if (!formatOpt) { - NazaraError("unexpected channel count: " + std::to_string(info.channels)); + NazaraError("unexpected channel count: {0}", info.channels); return Err(ResourceLoadingError::Unsupported); } @@ -163,7 +163,7 @@ namespace Nz std::unique_ptr file = std::make_unique(); if (!file->Open(filePath, OpenMode::ReadOnly)) { - NazaraError("failed to open stream from file: " + Error::GetLastError()); + NazaraError("failed to open stream from file: {0}", Error::GetLastError()); return Err(ResourceLoadingError::FailedToOpenFile); } @@ -208,7 +208,7 @@ namespace Nz std::optional formatOpt = GuessAudioFormat(m_decoder.info.channels); if (!formatOpt) { - NazaraError("unexpected channel count: " + std::to_string(m_decoder.info.channels)); + NazaraError("unexpected channel count: {0}", m_decoder.info.channels); return Err(ResourceLoadingError::Unsupported); } diff --git a/src/Nazara/Audio/OpenALBuffer.cpp b/src/Nazara/Audio/OpenALBuffer.cpp index 2d49b0036..10a37430b 100644 --- a/src/Nazara/Audio/OpenALBuffer.cpp +++ b/src/Nazara/Audio/OpenALBuffer.cpp @@ -78,7 +78,7 @@ namespace Nz if (ALenum lastError = m_library.alGetError(); lastError != AL_NO_ERROR) { - NazaraError("failed to reset OpenAL buffer: " + std::to_string(lastError)); + NazaraError("failed to reset OpenAL buffer: {0}", std::to_string(lastError)); return false; } diff --git a/src/Nazara/Audio/OpenALLibrary.cpp b/src/Nazara/Audio/OpenALLibrary.cpp index 22441af5c..411035c4d 100644 --- a/src/Nazara/Audio/OpenALLibrary.cpp +++ b/src/Nazara/Audio/OpenALLibrary.cpp @@ -65,6 +65,8 @@ namespace Nz for (const char* libname : libs) { + ErrorFlags disableError(ErrorMode::Silent, ~ErrorMode::ThrowException); + if (!m_library.Load(libname)) continue; @@ -84,6 +86,8 @@ namespace Nz } catch (const std::exception& e) { + ErrorFlags disableSilent({}, ~ErrorMode::Silent); + NazaraWarning(std::string("failed to load ") + libname + ": " + e.what()); continue; } diff --git a/src/Nazara/Audio/Sound.cpp b/src/Nazara/Audio/Sound.cpp index 09822c45c..dfd56ea7c 100644 --- a/src/Nazara/Audio/Sound.cpp +++ b/src/Nazara/Audio/Sound.cpp @@ -147,7 +147,7 @@ namespace Nz std::shared_ptr buffer = SoundBuffer::LoadFromFile(filePath, params); if (!buffer) { - NazaraError("Failed to load buffer from file (" + filePath.generic_u8string() + ')'); + NazaraError("Failed to load buffer from file ({0})", filePath); return false; } @@ -170,7 +170,7 @@ namespace Nz std::shared_ptr buffer = SoundBuffer::LoadFromMemory(data, size, params); if (!buffer) { - NazaraError("Failed to load buffer from memory (" + PointerToString(data) + ')'); + NazaraError("failed to load buffer from memory ({0})", PointerToString(data)); return false; } diff --git a/src/Nazara/BulletPhysics3D/BulletCollider3D.cpp b/src/Nazara/BulletPhysics3D/BulletCollider3D.cpp index 05106d32d..463ebb1d3 100644 --- a/src/Nazara/BulletPhysics3D/BulletCollider3D.cpp +++ b/src/Nazara/BulletPhysics3D/BulletCollider3D.cpp @@ -108,7 +108,7 @@ namespace Nz return std::make_shared(primitive.sphere.size); } - NazaraError("Primitive type not handled (0x" + NumberToString(UnderlyingCast(primitive.type), 16) + ')'); + NazaraError("Primitive type not handled ({0:#x})", UnderlyingCast(primitive.type)); return std::shared_ptr(); } diff --git a/src/Nazara/Core/AbstractHash.cpp b/src/Nazara/Core/AbstractHash.cpp index b6a465e97..86a4b61e5 100644 --- a/src/Nazara/Core/AbstractHash.cpp +++ b/src/Nazara/Core/AbstractHash.cpp @@ -76,7 +76,7 @@ namespace Nz return std::make_unique(); } - NazaraInternalError("Hash type not handled (0x" + NumberToString(UnderlyingCast(type), 16) + ')'); + NazaraInternalError("Hash type not handled ({0:#x})", UnderlyingCast(type)); return nullptr; } } diff --git a/src/Nazara/Core/DynLib.cpp b/src/Nazara/Core/DynLib.cpp index 0aa765bde..2a7f84652 100644 --- a/src/Nazara/Core/DynLib.cpp +++ b/src/Nazara/Core/DynLib.cpp @@ -76,7 +76,7 @@ namespace Nz auto impl = std::make_unique(); if (!impl->Load(libraryPath, &m_lastError)) { - NazaraError("Failed to load library: " + m_lastError); + NazaraError("failed to load library: {0}", m_lastError); return false; } diff --git a/src/Nazara/Core/Error.cpp b/src/Nazara/Core/Error.cpp index c22e867c5..69f11105c 100644 --- a/src/Nazara/Core/Error.cpp +++ b/src/Nazara/Core/Error.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -20,6 +21,22 @@ namespace Nz { + namespace NAZARA_ANONYMOUS_NAMESPACE + { + constexpr EnumArray s_errorTypes = { + "Assert failed: ", // ErrorType::AssertFailed + "Internal error: ", // ErrorType::Internal + "Error: ", // ErrorType::Normal + "Warning: " // ErrorType::Warning + }; + + thread_local ErrorModeFlags s_flags; + thread_local std::string s_lastError = "no error"; + thread_local std::string_view s_lastErrorFunction; + thread_local std::string_view s_lastErrorFile; + thread_local unsigned int s_lastErrorLine = 0; + } + /*! * \ingroup core * \class Nz::Error @@ -33,6 +50,8 @@ namespace Nz ErrorModeFlags Error::GetFlags() { + NAZARA_USE_ANONYMOUS_NAMESPACE + return s_flags; } @@ -45,8 +64,10 @@ namespace Nz * \param function Optional argument to set last error function */ - std::string Error::GetLastError(const char** file, unsigned int* line, const char** function) + std::string Error::GetLastError(std::string_view* file, unsigned int* line, std::string_view* function) { + NAZARA_USE_ANONYMOUS_NAMESPACE + if (file) *file = s_lastErrorFile; @@ -118,90 +139,39 @@ namespace Nz void Error::SetFlags(ErrorModeFlags flags) { + NAZARA_USE_ANONYMOUS_NAMESPACE + s_flags = flags; } - /*! - * \brief Checks if the error should trigger - * - * \param type ErrorType of the error - * \param error Message of the error - * - * \remark Produces a std::abort on AssertFailed with NAZARA_CORE_EXIT_ON_ASSERT_FAILURE defined - * \remark Produces a std::runtime_error on AssertFailed or throwing exception - */ - - void Error::Trigger(ErrorType type, std::string error) + void Error::TriggerInternal(ErrorType type, std::string error, unsigned int line, std::string_view file, std::string_view function) { - if (type == ErrorType::AssertFailed || (s_flags & ErrorMode::Silent) == 0 || (s_flags & ErrorMode::SilentDisabled) != 0) - Log::WriteError(type, error); + NAZARA_USE_ANONYMOUS_NAMESPACE - s_lastError = std::move(error); - s_lastErrorFile = ""; - s_lastErrorFunction = ""; - s_lastErrorLine = 0; + if (type == ErrorType::AssertFailed || (s_flags & ErrorMode::Silent) == 0) + { + if (line == 0 && file.empty()) + Log::Write("{}{}", s_errorTypes[type], error); + else + Log::Write("{}{} ({}:{}: {})", s_errorTypes[type], error, file, line, function); + } + + if (type != ErrorType::Warning) + { + s_lastError = std::move(error); + s_lastErrorFile = file; + s_lastErrorFunction = function; + s_lastErrorLine = line; + } #if NAZARA_CORE_EXIT_ON_ASSERT_FAILURE if (type == ErrorType::AssertFailed) std::abort(); #endif - if (type == ErrorType::AssertFailed || (type != ErrorType::Warning && - (s_flags & ErrorMode::ThrowException) != 0 && (s_flags & ErrorMode::ThrowExceptionDisabled) == 0)) + if (type == ErrorType::AssertFailed || (type != ErrorType::Warning && s_flags.Test(ErrorMode::ThrowException))) throw std::runtime_error(s_lastError); } - - /*! - * \brief Checks if the error should trigger - * - * \param type ErrorType of the error - * \param error Message of the error - * \param line Line of the error - * \param file File of the error - * \param function Function of the error - * - * \remark Produces a std::abort on AssertFailed with NAZARA_CORE_EXIT_ON_ASSERT_FAILURE defined - * \remark Produces a std::runtime_error on AssertFailed or throwing exception - */ - - void Error::Trigger(ErrorType type, std::string error, unsigned int line, const char* file, const char* function) - { - file = GetCurrentFileRelativeToEngine(file); - - if (type == ErrorType::AssertFailed || (s_flags & ErrorMode::Silent) == 0 || (s_flags & ErrorMode::SilentDisabled) != 0) - Log::WriteError(type, error, line, file, function); - - s_lastError = std::move(error); - s_lastErrorFile = file; - s_lastErrorFunction = function; - s_lastErrorLine = line; - - #if NAZARA_CORE_EXIT_ON_ASSERT_FAILURE - if (type == ErrorType::AssertFailed) - std::abort(); - #endif - - if (type == ErrorType::AssertFailed || (type != ErrorType::Warning && - (s_flags & ErrorMode::ThrowException) != 0 && (s_flags & ErrorMode::ThrowExceptionDisabled) == 0)) - throw std::runtime_error(s_lastError); - } - - const char* Error::GetCurrentFileRelativeToEngine(const char* file) - { - if (const char* ptr = std::strstr(file, "NazaraEngine/")) - return ptr; - - if (const char* ptr = std::strstr(file, "NazaraEngine\\")) - return ptr; - - return file; - } - - ErrorModeFlags Error::s_flags = ErrorMode::None; - std::string Error::s_lastError; - const char* Error::s_lastErrorFunction = ""; - const char* Error::s_lastErrorFile = ""; - unsigned int Error::s_lastErrorLine = 0; } #if defined(NAZARA_PLATFORM_WINDOWS) diff --git a/src/Nazara/Core/ErrorFlags.cpp b/src/Nazara/Core/ErrorFlags.cpp index 749f1a229..34df038ae 100644 --- a/src/Nazara/Core/ErrorFlags.cpp +++ b/src/Nazara/Core/ErrorFlags.cpp @@ -21,10 +21,10 @@ namespace Nz * \param replace Replace the entirely the old flag if true, else do a "OR" */ - ErrorFlags::ErrorFlags(ErrorModeFlags flags, bool replace) : + ErrorFlags::ErrorFlags(ErrorModeFlags orFlags, ErrorModeFlags andFlags) : m_previousFlags(Error::GetFlags()) { - SetFlags(flags, replace); + SetFlags(orFlags, andFlags); } /*! @@ -51,11 +51,12 @@ namespace Nz * \param flags Flags for the error * \param replace Replace the entirely the old flag if true, else do a "OR" */ - void ErrorFlags::SetFlags(ErrorModeFlags flags, bool replace) + void ErrorFlags::SetFlags(ErrorModeFlags orFlags, ErrorModeFlags andFlags) { - if (!replace) - flags |= m_previousFlags; + ErrorModeFlags newFlags = m_previousFlags; + newFlags |= orFlags; + newFlags &= andFlags; - Error::SetFlags(flags); + Error::SetFlags(newFlags); } } diff --git a/src/Nazara/Core/File.cpp b/src/Nazara/Core/File.cpp index 98822ff49..fc8da89ca 100644 --- a/src/Nazara/Core/File.cpp +++ b/src/Nazara/Core/File.cpp @@ -192,7 +192,7 @@ namespace Nz if (!impl->Open(m_filePath, openMode)) { ErrorFlags flags(ErrorMode::Silent); // Silent by default - NazaraError("failed to open \"" + m_filePath.generic_u8string() + "\": " + Error::GetLastSystemError()); + NazaraError("failed to open \"{0}\": {1}", m_filePath, Error::GetLastSystemError()); return false; } @@ -243,7 +243,7 @@ namespace Nz std::unique_ptr impl = std::make_unique(this); if (!impl->Open(filePath, m_openMode)) { - NazaraError("Failed to open new file; " + Error::GetLastSystemError()); + NazaraError("failed to open new file; {0}", Error::GetLastSystemError()); return false; } @@ -281,7 +281,7 @@ namespace Nz File file(path); if (!file.Open(OpenMode::ReadOnly | OpenMode::Unbuffered)) //< unbuffered since we will read all the file at once { - NazaraError("failed to open \"" + path.generic_u8string() + '"'); + NazaraError("failed to open \"{0}\"", path); return std::nullopt; } @@ -301,7 +301,7 @@ namespace Nz File file(path); if (!file.Open(OpenMode::WriteOnly | OpenMode::Unbuffered)) //< unbuffered since we will write all the file at once { - NazaraError("failed to open \"" + path.generic_u8string() + '"'); + NazaraError("failed to open \"{0}\"", path); return false; } diff --git a/src/Nazara/Core/GuillotineBinPack.cpp b/src/Nazara/Core/GuillotineBinPack.cpp index bef1db90b..3f8ae2e96 100644 --- a/src/Nazara/Core/GuillotineBinPack.cpp +++ b/src/Nazara/Core/GuillotineBinPack.cpp @@ -613,7 +613,7 @@ namespace Nz break; default: - NazaraError("Split heuristic out of enum (0x" + NumberToString(method, 16) + ')'); + NazaraError("Split heuristic out of enum ({0:#x})", UnderlyingCast(method)); splitHorizontal = true; } @@ -658,7 +658,7 @@ namespace Nz return ScoreWorstShortSideFit(width, height, freeRect); } - NazaraError("Rect choice heuristic out of enum (0x" + NumberToString(rectChoice, 16) + ')'); + NazaraError("Rect choice heuristic out of enum ({0:#x})", UnderlyingCast(rectChoice)); return std::numeric_limits::max(); } } diff --git a/src/Nazara/Core/Posix/FileImpl.cpp b/src/Nazara/Core/Posix/FileImpl.cpp index 55d53b829..ab151d769 100644 --- a/src/Nazara/Core/Posix/FileImpl.cpp +++ b/src/Nazara/Core/Posix/FileImpl.cpp @@ -46,7 +46,7 @@ namespace Nz void FileImpl::Flush() { if (fsync(m_fileDescriptor) == -1) - NazaraError("Unable to flush file: " + Error::GetLastSystemError()); + NazaraError("Unable to flush file: {0}", Error::GetLastSystemError()); } UInt64 FileImpl::GetCursorPos() const @@ -81,7 +81,7 @@ namespace Nz int fileDescriptor = Open_def(filePath.generic_u8string().data(), flags, permissions); if (fileDescriptor == -1) { - NazaraError("Failed to open \"" + filePath.generic_u8string() + "\" : " + Error::GetLastSystemError()); + NazaraError("Failed to open \"{0}\": {1}", filePath, Error::GetLastSystemError()); return false; } @@ -161,7 +161,7 @@ namespace Nz break; default: - NazaraInternalError("Cursor position not handled (0x" + NumberToString(UnderlyingCast(pos), 16) + ')'); + NazaraInternalError("Cursor position not handled ({0:#x})", UnderlyingCast(pos)); return false; } diff --git a/src/Nazara/Core/StringExt.cpp b/src/Nazara/Core/StringExt.cpp index 6f4b6bbe5..c397d6e4a 100644 --- a/src/Nazara/Core/StringExt.cpp +++ b/src/Nazara/Core/StringExt.cpp @@ -202,7 +202,7 @@ namespace Nz } catch (utf8::exception& e) { - NazaraError("UTF-8 error: " + std::string(e.what())); + NazaraError("UTF-8 error: {0}", e.what()); } catch (std::exception& e) { diff --git a/src/Nazara/Core/ToString.cpp b/src/Nazara/Core/ToString.cpp new file mode 100644 index 000000000..5c2a36f55 --- /dev/null +++ b/src/Nazara/Core/ToString.cpp @@ -0,0 +1,61 @@ +// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com) +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include +#include +#include + +namespace Nz +{ + namespace Detail + { + std::string FormatFallback(std::string_view str) + { + return fmt::format(str); + } + + std::string FormatFallback(std::string_view str, std::string_view param1) + { + return fmt::format(str, param1); + } + + std::string FormatFallback(std::string_view str, std::string_view param1, std::string_view param2) + { + return fmt::format(str, param1, param2); + } + + std::string FormatFallback(std::string_view str, std::string_view param1, std::string_view param2, std::string_view param3) + { + return fmt::format(str, param1, param2, param3); + } + + std::string FormatFallback(std::string_view str, std::string_view param1, std::string_view param2, std::string_view param3, std::string_view param4) + { + return fmt::format(str, param1, param2, param3, param4); + } + + std::string FormatFallback(std::string_view str, std::string_view param1, std::string_view param2, std::string_view param3, std::string_view param4, std::string_view param5) + { + return fmt::format(str, param1, param2, param3, param4, param5); + } + } + + std::string ToStringFormatter::Format(const std::filesystem::path& path) + { + return path.generic_u8string(); + } + +#define NAZARA_TO_STRING_FMT_SPEC(Type) \ + std::string ToStringFormatter::Format(Type value) \ + { \ + return fmt::format("{}", value); \ + } + + NAZARA_TO_STRING_FMT_SPEC(float); + NAZARA_TO_STRING_FMT_SPEC(double); + NAZARA_TO_STRING_FMT_SPEC(long double); + +#undef NAZARA_TO_STRING_CPP_SPEC +} diff --git a/src/Nazara/Core/Win32/FileImpl.cpp b/src/Nazara/Core/Win32/FileImpl.cpp index 35b7efc12..7661ce577 100644 --- a/src/Nazara/Core/Win32/FileImpl.cpp +++ b/src/Nazara/Core/Win32/FileImpl.cpp @@ -43,7 +43,7 @@ namespace Nz void FileImpl::Flush() { if (!FlushFileBuffers(m_handle)) - NazaraError("Unable to flush file: " + Error::GetLastSystemError()); + NazaraError("Unable to flush file: {0}", Error::GetLastSystemError()); } UInt64 FileImpl::GetCursorPos() const @@ -153,7 +153,7 @@ namespace Nz break; default: - NazaraInternalError("Cursor position not handled (0x" + NumberToString(UnderlyingCast(pos), 16) + ')'); + NazaraInternalError("Cursor position not handled ({0:#x})", UnderlyingCast(pos)); return false; } @@ -177,13 +177,13 @@ namespace Nz if (!SetCursorPos(CursorPosition::AtBegin, size)) { - NazaraError("Failed to set file size: failed to move cursor position: " + Error::GetLastSystemError()); + NazaraError("failed to set file size: failed to move cursor position: {0}", Error::GetLastSystemError()); return false; } if (!SetEndOfFile(m_handle)) { - NazaraError("Failed to set file size: " + Error::GetLastSystemError()); + NazaraError("failed to set file size: {0}", Error::GetLastSystemError()); return false; } diff --git a/src/Nazara/Graphics/GuillotineTextureAtlas.cpp b/src/Nazara/Graphics/GuillotineTextureAtlas.cpp index e5dad07aa..50d895759 100644 --- a/src/Nazara/Graphics/GuillotineTextureAtlas.cpp +++ b/src/Nazara/Graphics/GuillotineTextureAtlas.cpp @@ -51,7 +51,7 @@ namespace Nz } catch (const std::exception& e) { - NazaraError(std::string("Failed to instantiate texture: ") + e.what()); + NazaraError("failed to instantiate texture: {0}", e.what()); return nullptr; } @@ -62,7 +62,7 @@ namespace Nz if (!newTexture->Copy(oldTexture, Boxui(0, 0, 0, oldSize.x, oldSize.y, oldSize.z))) { - NazaraError("Failed to update texture"); + NazaraError("failed to update texture"); return nullptr; } } diff --git a/src/Nazara/Graphics/PropertyHandler/TexturePropertyHandler.cpp b/src/Nazara/Graphics/PropertyHandler/TexturePropertyHandler.cpp index d70511eb8..6bb91adfd 100644 --- a/src/Nazara/Graphics/PropertyHandler/TexturePropertyHandler.cpp +++ b/src/Nazara/Graphics/PropertyHandler/TexturePropertyHandler.cpp @@ -35,11 +35,7 @@ namespace Nz if (textureProperty.type != textureData.imageType) { // TODO: Use EnumToString to show image type as string - NazaraError("unmatching texture type: material property is of type " + - std::to_string(UnderlyingCast(textureProperty.type)) + - " but shader sampler is of type " + - std::to_string(UnderlyingCast(textureData.imageType))); - + NazaraError("unmatching texture type: material property is of type {0} but shader sampler is of type {1}", UnderlyingCast(textureProperty.type), UnderlyingCast(textureData.imageType)); return; } @@ -54,7 +50,7 @@ namespace Nz m_optionHash = optionData->hash; } else - NazaraError("option " + m_optionName + " is not a boolean option (got " + ToString(optionData->type) + ")"); + NazaraError("option {0} is not a boolean option (got {1})", m_optionName, nzsl::Ast::ToString(optionData->type)); } } diff --git a/src/Nazara/Graphics/ShaderReflection.cpp b/src/Nazara/Graphics/ShaderReflection.cpp index 27fee30a6..1ed196d08 100644 --- a/src/Nazara/Graphics/ShaderReflection.cpp +++ b/src/Nazara/Graphics/ShaderReflection.cpp @@ -66,14 +66,14 @@ namespace Nz const auto& arrayType = std::get(*varType); const auto& innerType = arrayType.containedType->type; if (!IsSamplerType(innerType)) - throw std::runtime_error("unexpected type " + ToString(innerType) + " in array " + ToString(arrayType)); + throw std::runtime_error("unexpected type " + nzsl::Ast::ToString(innerType) + " in array " + nzsl::Ast::ToString(arrayType)); arraySize = arrayType.length; bindingType = ShaderBindingType::Sampler; varType = &innerType; } else - throw std::runtime_error("unexpected type " + ToString(varType)); + throw std::runtime_error("unexpected type " + nzsl::Ast::ToString(varType)); // TODO: Get more precise shader stage type m_pipelineLayoutInfo.bindings.push_back({ diff --git a/src/Nazara/Graphics/UberShader.cpp b/src/Nazara/Graphics/UberShader.cpp index 5484dfd54..cf1c3aae7 100644 --- a/src/Nazara/Graphics/UberShader.cpp +++ b/src/Nazara/Graphics/UberShader.cpp @@ -35,7 +35,7 @@ namespace Nz nzsl::Ast::ModulePtr newShaderModule = resolver->Resolve(name); if (!newShaderModule) { - NazaraError("failed to retrieve updated shader module " + name); + NazaraError("failed to retrieve updated shader module {0}", name); return; } @@ -45,7 +45,7 @@ namespace Nz } catch (const std::exception& e) { - NazaraError("failed to retrieve updated shader module " + name + ": " + e.what()); + NazaraError("failed to retrieve updated shader module {0}: {1}", name, e.what()); return; } diff --git a/src/Nazara/JoltPhysics3D/JoltCollider3D.cpp b/src/Nazara/JoltPhysics3D/JoltCollider3D.cpp index 5ed0fa569..ad34ee882 100644 --- a/src/Nazara/JoltPhysics3D/JoltCollider3D.cpp +++ b/src/Nazara/JoltPhysics3D/JoltCollider3D.cpp @@ -101,7 +101,7 @@ namespace Nz return std::make_shared(primitive.sphere.size); } - NazaraError("Primitive type not handled (0x" + NumberToString(UnderlyingCast(primitive.type), 16) + ')'); + NazaraError("Primitive type not handled ({0:#x})", UnderlyingCast(primitive.type)); return std::shared_ptr(); } diff --git a/src/Nazara/Network/AbstractSocket.cpp b/src/Nazara/Network/AbstractSocket.cpp index 0169fef68..d33d41a16 100644 --- a/src/Nazara/Network/AbstractSocket.cpp +++ b/src/Nazara/Network/AbstractSocket.cpp @@ -179,7 +179,7 @@ namespace Nz { SocketError errorCode; if (!SocketImpl::SetBlocking(m_handle, m_isBlockingEnabled, &errorCode)) - NazaraWarning("Failed to set socket blocking mode (0x" + NumberToString(UnderlyingCast(errorCode), 16) + ')'); + NazaraWarning("failed to set socket blocking mode ({0:#x})", UnderlyingCast(errorCode)); } /*! @@ -201,7 +201,7 @@ namespace Nz { SocketImpl::Close(handle); - NazaraError("Failed to open a dual-stack socket: " + std::string(ErrorToString(m_lastError))); + NazaraError("failed to open a dual-stack socket: {0}", std::string(ErrorToString(m_lastError))); return false; } diff --git a/src/Nazara/Network/CurlLibrary.cpp b/src/Nazara/Network/CurlLibrary.cpp index aeb1680be..0d17595f1 100644 --- a/src/Nazara/Network/CurlLibrary.cpp +++ b/src/Nazara/Network/CurlLibrary.cpp @@ -39,7 +39,7 @@ namespace Nz if (!m_library.IsLoaded()) { - NazaraError("failed to load libcurl: " + m_library.GetLastError()); + NazaraError("failed to load libcurl: {0}", m_library.GetLastError()); return false; } diff --git a/src/Nazara/Network/ENetHost.cpp b/src/Nazara/Network/ENetHost.cpp index fdfd9ebd0..6ca584285 100644 --- a/src/Nazara/Network/ENetHost.cpp +++ b/src/Nazara/Network/ENetHost.cpp @@ -96,7 +96,7 @@ namespace Nz if (peerId >= m_peers.size()) { - NazaraError("Insufficient peers"); + NazaraError("insufficient peers"); return nullptr; } @@ -168,7 +168,7 @@ namespace Nz if (peerCount > ENetConstants::ENetProtocol_MaximumPeerId) { - NazaraError("Peer count exceeds maximum peer count supported by protocol (" + NumberToString(ENetConstants::ENetProtocol_MaximumPeerId) + ")"); + NazaraError("peer count exceeds maximum peer count supported by protocol ({0})", UnderlyingCast(ENetConstants::ENetProtocol_MaximumPeerId)); return false; } @@ -338,7 +338,7 @@ namespace Nz { if (m_socket.Bind(address) != SocketState::Bound) { - NazaraError("Failed to bind address " + address.ToString()); + NazaraError("failed to bind address {0}", address.ToString()); return false; } } diff --git a/src/Nazara/Network/IpAddress.cpp b/src/Nazara/Network/IpAddress.cpp index 5e06045b0..c2daab607 100644 --- a/src/Nazara/Network/IpAddress.cpp +++ b/src/Nazara/Network/IpAddress.cpp @@ -94,7 +94,7 @@ namespace Nz return m_ipv6 == LoopbackIpV6.m_ipv6; // Only compare the ip value } - NazaraInternalError("Invalid protocol for IpAddress (0x" + NumberToString(UnderlyingCast(m_protocol), 16) + ')'); + NazaraInternalError("Invalid protocol for IpAddress ({0:#x})", UnderlyingCast(m_protocol)); return false; } diff --git a/src/Nazara/Network/Linux/SocketPollerImpl.cpp b/src/Nazara/Network/Linux/SocketPollerImpl.cpp index cc56767ca..e496ad5c9 100644 --- a/src/Nazara/Network/Linux/SocketPollerImpl.cpp +++ b/src/Nazara/Network/Linux/SocketPollerImpl.cpp @@ -61,7 +61,7 @@ namespace Nz if (epoll_ctl(m_handle, EPOLL_CTL_ADD, socket, &entry) != 0) { - NazaraError("Failed to add socket to epoll structure (errno " + NumberToString(errno) + ": " + Error::GetLastSystemError() + ')'); + NazaraError("failed to add socket to epoll structure (errno {0}: {1})", errno, Error::GetLastSystemError()); return false; } diff --git a/src/Nazara/Network/Posix/IpAddressImpl.cpp b/src/Nazara/Network/Posix/IpAddressImpl.cpp index 5d0e76b10..5777c9cfd 100644 --- a/src/Nazara/Network/Posix/IpAddressImpl.cpp +++ b/src/Nazara/Network/Posix/IpAddressImpl.cpp @@ -178,7 +178,7 @@ namespace Nz } default: - NazaraInternalError("Unhandled ip protocol (0x" + NumberToString(UnderlyingCast(ipAddress.GetProtocol()), 16) + ')'); + NazaraInternalError("Unhandled ip protocol ({0:#x})", UnderlyingCast(ipAddress.GetProtocol())); break; } } diff --git a/src/Nazara/Network/SocketPoller.cpp b/src/Nazara/Network/SocketPoller.cpp index 742178ca0..f82135ce5 100644 --- a/src/Nazara/Network/SocketPoller.cpp +++ b/src/Nazara/Network/SocketPoller.cpp @@ -198,7 +198,7 @@ namespace Nz if (waitError != SocketError::NoError) { if (waitError != SocketError::Interrupted) //< Do not log interrupted error - NazaraError("SocketPoller encountered an error (code: 0x" + NumberToString(UnderlyingCast(waitError), 16) + "): " + ErrorToString(waitError)); + NazaraError("SocketPoller encountered an error (code: {0:#x}): {1}", UnderlyingCast(waitError), ErrorToString(waitError)); return 0; } diff --git a/src/Nazara/Network/TcpClient.cpp b/src/Nazara/Network/TcpClient.cpp index 5d672399c..2f60f8b21 100644 --- a/src/Nazara/Network/TcpClient.cpp +++ b/src/Nazara/Network/TcpClient.cpp @@ -187,7 +187,7 @@ namespace Nz break; } - NazaraInternalError("Unexpected socket state (0x" + NumberToString(UnderlyingCast(m_state), 16) + ')'); + NazaraInternalError("Unexpected socket state ({0:#x})", UnderlyingCast(m_state)); return m_state; } @@ -479,7 +479,7 @@ namespace Nz break; } - NazaraInternalError("Unhandled socket state (0x" + NumberToString(UnderlyingCast(m_state), 16) + ')'); + NazaraInternalError("Unhandled socket state ({0:#x})", UnderlyingCast(m_state)); return m_state; } @@ -516,10 +516,10 @@ namespace Nz SocketError errorCode; if (!SocketImpl::SetNoDelay(m_handle, m_isLowDelayEnabled, &errorCode)) - NazaraWarning("Failed to set socket no delay mode (0x" + NumberToString(UnderlyingCast(errorCode), 16) + ')'); + NazaraWarning("failed to set socket no delay mode ({0:#x})", UnderlyingCast(errorCode)); if (!SocketImpl::SetKeepAlive(m_handle, m_isKeepAliveEnabled, m_keepAliveTime, m_keepAliveInterval, &errorCode)) - NazaraWarning("Failed to set socket keep alive mode (0x" + NumberToString(UnderlyingCast(errorCode), 16) + ')'); + NazaraWarning("failed to set socket keep alive mode ({0:#x})", UnderlyingCast(errorCode)); m_peerAddress = IpAddress::Invalid; m_openMode = OpenMode_ReadWrite; diff --git a/src/Nazara/Network/Win32/SocketImpl.cpp b/src/Nazara/Network/Win32/SocketImpl.cpp index 101d003c2..04cb92319 100644 --- a/src/Nazara/Network/Win32/SocketImpl.cpp +++ b/src/Nazara/Network/Win32/SocketImpl.cpp @@ -160,7 +160,7 @@ namespace Nz int errorCode = WSAStartup(MAKEWORD(2, 2), &s_WSA); if (errorCode != 0) { - NazaraError("Failed to initialize Windows Socket 2.2: " + Error::GetLastSystemError(errorCode)); + NazaraError("failed to initialize Windows Socket 2.2: {0}", Error::GetLastSystemError(errorCode)); return false; } diff --git a/src/Nazara/Network/Win32/SocketPollerImpl.cpp b/src/Nazara/Network/Win32/SocketPollerImpl.cpp index 2c3194737..f2cf88fb3 100644 --- a/src/Nazara/Network/Win32/SocketPollerImpl.cpp +++ b/src/Nazara/Network/Win32/SocketPollerImpl.cpp @@ -91,7 +91,7 @@ namespace Nz fd_set& targetSet = (i == 0) ? m_readSockets : m_writeSockets; if (targetSet.fd_count > FD_SETSIZE) { - NazaraError("Socket count exceeding hard-coded FD_SETSIZE (" + NumberToString(FD_SETSIZE) + ")"); + NazaraError("Socket count exceeding hard-coded FD_SETSIZE ({0})", FD_SETSIZE); return false; } diff --git a/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp b/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp index c30c3e29a..703ee8d8c 100644 --- a/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp +++ b/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp @@ -369,13 +369,13 @@ namespace Nz::GL // Validate framebuffer completeness if (GLenum checkResult = m_blitFramebuffers->drawFBO.Check(); checkResult != GL_FRAMEBUFFER_COMPLETE) { - NazaraError("Blit draw FBO is incomplete: " + TranslateOpenGLError(checkResult)); + NazaraError("Blit draw FBO is incomplete: {0}", TranslateOpenGLError(checkResult)); return false; } if (GLenum checkResult = m_blitFramebuffers->readFBO.Check(); checkResult != GL_FRAMEBUFFER_COMPLETE) { - NazaraError("Blit read FBO is incomplete: " + TranslateOpenGLError(checkResult)); + NazaraError("Blit read FBO is incomplete: {0}", TranslateOpenGLError(checkResult)); return false; } @@ -707,7 +707,7 @@ namespace Nz::GL { hasAnyError = true; - NazaraError("OpenGL error: " + TranslateOpenGLError(lastError)); + NazaraError("OpenGL error: {0}", TranslateOpenGLError(lastError)); } m_didCollectErrors = true; diff --git a/src/Nazara/OpenGLRenderer/Wrapper/EGL/EGLContextBase.cpp b/src/Nazara/OpenGLRenderer/Wrapper/EGL/EGLContextBase.cpp index daaf42a36..eaa987219 100644 --- a/src/Nazara/OpenGLRenderer/Wrapper/EGL/EGLContextBase.cpp +++ b/src/Nazara/OpenGLRenderer/Wrapper/EGL/EGLContextBase.cpp @@ -166,7 +166,7 @@ namespace Nz::GL EGLint numConfig = 0; if (m_loader.eglChooseConfig(m_display, configAttributes, configs, EGLint(maxConfigCount), &numConfig) != GL_TRUE) { - NazaraError(std::string("failed to retrieve compatible EGL configurations: ") + EGLLoader::TranslateError(m_loader.eglGetError())); + NazaraError("failed to retrieve compatible EGL configurations: {0}", EGLLoader::TranslateError(m_loader.eglGetError())); return false; } @@ -267,7 +267,7 @@ namespace Nz::GL if (!m_handle) { - NazaraError(std::string("failed to create EGL context: ") + EGLLoader::TranslateError(m_loader.eglGetError())); + NazaraError("failed to create EGL context: {0}", EGLLoader::TranslateError(m_loader.eglGetError())); return false; } diff --git a/src/Nazara/OpenGLRenderer/Wrapper/WGL/WGLContext.cpp b/src/Nazara/OpenGLRenderer/Wrapper/WGL/WGLContext.cpp index b563e1461..48f23e39d 100644 --- a/src/Nazara/OpenGLRenderer/Wrapper/WGL/WGLContext.cpp +++ b/src/Nazara/OpenGLRenderer/Wrapper/WGL/WGLContext.cpp @@ -25,7 +25,7 @@ namespace Nz::GL HWNDHandle window(::CreateWindowA("STATIC", nullptr, WS_DISABLED | WS_POPUP, 0, 0, 1, 1, nullptr, nullptr, GetModuleHandle(nullptr), nullptr)); if (!window) { - NazaraError("failed to create dummy window: " + Error::GetLastSystemError()); + NazaraError("failed to create dummy window: {0}", Error::GetLastSystemError()); return false; } @@ -34,7 +34,7 @@ namespace Nz::GL m_deviceContext = ::GetDC(window.get()); if (!m_deviceContext) { - NazaraError("failed to retrieve dummy window device context: " + Error::GetLastSystemError()); + NazaraError("failed to retrieve dummy window device context: {0}", Error::GetLastSystemError()); return false; } @@ -54,7 +54,7 @@ namespace Nz::GL m_deviceContext = ::GetDC(static_cast(window.windows.window)); if (!m_deviceContext) { - NazaraError("failed to retrieve window device context: " + Error::GetLastSystemError()); + NazaraError("failed to retrieve window device context: {0}", Error::GetLastSystemError()); return false; } @@ -208,7 +208,7 @@ namespace Nz::GL if (!m_handle) { - NazaraError("failed to create WGL context: " + Error::GetLastSystemError()); + NazaraError("failed to create WGL context: {0}", Error::GetLastSystemError()); return false; } } @@ -217,7 +217,7 @@ namespace Nz::GL m_handle = m_loader.wglCreateContext(m_deviceContext); if (!m_handle) { - NazaraError("failed to create WGL context: " + Error::GetLastSystemError()); + NazaraError("failed to create WGL context: {0}", Error::GetLastSystemError()); return false; } @@ -225,7 +225,7 @@ namespace Nz::GL { if (!m_loader.wglShareLists(shareContext->m_handle, m_handle)) { - NazaraError("failed to share context objects: " + Error::GetLastSystemError()); + NazaraError("failed to share context objects: {0}", Error::GetLastSystemError()); return false; } } @@ -268,7 +268,7 @@ namespace Nz::GL bool succeeded = m_loader.wglMakeCurrent(m_deviceContext, m_handle); if (!succeeded) { - NazaraError("failed to activate context: " + Error::GetLastSystemError()); + NazaraError("failed to activate context: {0}", Error::GetLastSystemError()); return false; } @@ -389,14 +389,14 @@ namespace Nz::GL pixelFormat = m_loader.ChoosePixelFormat(m_deviceContext, &descriptor); if (pixelFormat == 0) { - NazaraError("Failed to choose pixel format: " + Error::GetLastSystemError()); + NazaraError("failed to choose pixel format: {0}", Error::GetLastSystemError()); return false; } } if (!m_loader.SetPixelFormat(m_deviceContext, pixelFormat, &descriptor)) { - NazaraError("Failed to choose pixel format: " + Error::GetLastSystemError()); + NazaraError("failed to choose pixel format: {0}", Error::GetLastSystemError()); return false; } diff --git a/src/Nazara/OpenGLRenderer/Wrapper/Web/WebContext.cpp b/src/Nazara/OpenGLRenderer/Wrapper/Web/WebContext.cpp index 3bb493221..199002724 100644 --- a/src/Nazara/OpenGLRenderer/Wrapper/Web/WebContext.cpp +++ b/src/Nazara/OpenGLRenderer/Wrapper/Web/WebContext.cpp @@ -126,13 +126,13 @@ namespace Nz::GL } else { - NazaraError(std::string("failed to create WebGL context: OpenGL is not supported")); + NazaraError("failed to create WebGL context: OpenGL is not supported"); return false; } if (m_handle <= 0) { - NazaraError(std::string("failed to create Web context: ") + WebLoader::TranslateError(static_cast(m_handle))); + NazaraError("failed to create Web context: {0}", WebLoader::TranslateError(static_cast(m_handle))); return false; } diff --git a/src/Nazara/OpenGLRenderer/Wrapper/Win32/EGLContextWin32.cpp b/src/Nazara/OpenGLRenderer/Wrapper/Win32/EGLContextWin32.cpp index c32a32ea6..ff392e81b 100644 --- a/src/Nazara/OpenGLRenderer/Wrapper/Win32/EGLContextWin32.cpp +++ b/src/Nazara/OpenGLRenderer/Wrapper/Win32/EGLContextWin32.cpp @@ -14,7 +14,7 @@ namespace Nz::GL HWNDHandle window(::CreateWindowA("STATIC", nullptr, WS_DISABLED | WS_POPUP, 0, 0, 1, 1, nullptr, nullptr, GetModuleHandle(nullptr), nullptr)); if (!window) { - NazaraError("failed to create dummy window: " + Error::GetLastSystemError()); + NazaraError("failed to create dummy window: {0}", Error::GetLastSystemError()); return false; } @@ -47,7 +47,7 @@ namespace Nz::GL /*HDC deviceContext = ::GetDC(windowHandle); if (!deviceContext) { - NazaraError("failed to retrieve window device context: " + Error::GetLastSystemError()); + NazaraError("failed to retrieve window device context: {0}", Error::GetLastSystemError()); return false; } diff --git a/src/Nazara/Platform/Cursor.cpp b/src/Nazara/Platform/Cursor.cpp index 8bd5ebf37..88d33cda1 100644 --- a/src/Nazara/Platform/Cursor.cpp +++ b/src/Nazara/Platform/Cursor.cpp @@ -13,13 +13,13 @@ namespace Nz Cursor::Cursor(const Image& cursor, const Vector2i& hotSpot, SystemCursor placeholder) { - ErrorFlags flags(ErrorMode::ThrowException, true); + ErrorFlags flags(ErrorMode::ThrowException); Create(cursor, hotSpot, placeholder); } Cursor::Cursor(SystemCursor systemCursor) { - ErrorFlags flags(ErrorMode::ThrowException, true); + ErrorFlags flags(ErrorMode::ThrowException); Create(systemCursor); } diff --git a/src/Nazara/Platform/Icon.cpp b/src/Nazara/Platform/Icon.cpp index 760dfb448..a9b7191b3 100644 --- a/src/Nazara/Platform/Icon.cpp +++ b/src/Nazara/Platform/Icon.cpp @@ -12,7 +12,7 @@ namespace Nz Icon::Icon(const Image& icon) { - ErrorFlags flags(ErrorMode::ThrowException, true); + ErrorFlags flags(ErrorMode::ThrowException); Create(icon); } diff --git a/src/Nazara/Platform/SDL2/CursorImpl.cpp b/src/Nazara/Platform/SDL2/CursorImpl.cpp index 4b65246fc..9da774bc6 100644 --- a/src/Nazara/Platform/SDL2/CursorImpl.cpp +++ b/src/Nazara/Platform/SDL2/CursorImpl.cpp @@ -55,7 +55,7 @@ namespace Nz ); if (!m_surface) - NazaraError("failed to create SDL Surface for cursor: " + std::string(SDL_GetError())); + NazaraError("failed to create SDL Surface for cursor: {0}", std::string(SDL_GetError())); m_cursor = SDL_CreateColorCursor(m_surface, hotSpot.x, hotSpot.y); if (!m_cursor) @@ -63,7 +63,7 @@ namespace Nz if (m_surface) //< Just in case exceptions were disabled SDL_FreeSurface(m_surface); - NazaraError("failed to create SDL cursor: " + std::string(SDL_GetError())); + NazaraError("failed to create SDL cursor: {0}", std::string(SDL_GetError())); } } @@ -77,7 +77,7 @@ namespace Nz { m_cursor = SDL_CreateSystemCursor(s_systemCursorIds[cursor]); if (!m_cursor) - NazaraError("failed to create SDL cursor: " + std::string(SDL_GetError())); + NazaraError("failed to create SDL cursor: {0}", std::string(SDL_GetError())); } } diff --git a/src/Nazara/Platform/SDL2/IconImpl.cpp b/src/Nazara/Platform/SDL2/IconImpl.cpp index 7fe123897..3194f360e 100644 --- a/src/Nazara/Platform/SDL2/IconImpl.cpp +++ b/src/Nazara/Platform/SDL2/IconImpl.cpp @@ -28,7 +28,7 @@ namespace Nz ); if (!m_icon) - NazaraError("failed to create SDL Surface for icon: " + std::string(SDL_GetError())); + NazaraError("failed to create SDL Surface for icon: {0}", std::string(SDL_GetError())); } IconImpl::~IconImpl() diff --git a/src/Nazara/Platform/SDL2/WindowImpl.cpp b/src/Nazara/Platform/SDL2/WindowImpl.cpp index 7651c4daa..78382e345 100644 --- a/src/Nazara/Platform/SDL2/WindowImpl.cpp +++ b/src/Nazara/Platform/SDL2/WindowImpl.cpp @@ -91,7 +91,7 @@ namespace Nz m_handle = SDL_CreateWindow(title.c_str(), x, y, width, height, winStyle); if (!m_handle) { - NazaraError("Failed to create window: " + Error::GetLastSystemError()); + NazaraError("failed to create window: {0}", Error::GetLastSystemError()); return false; } @@ -212,8 +212,8 @@ namespace Nz if (SDL_GetWindowWMInfo(m_handle, &wmInfo) != SDL_TRUE) { #ifndef NAZARA_PLATFORM_WEB - ErrorFlags flags(ErrorMode::ThrowException, true); - NazaraError(std::string("failed to retrieve window manager info: ") + SDL_GetError()); + ErrorFlags flags(ErrorMode::ThrowException); + NazaraError("failed to retrieve window manager info: {0}", SDL_GetError()); #endif } @@ -261,7 +261,7 @@ namespace Nz #if defined(NAZARA_PLATFORM_WEB) handle.type = WindowBackend::Web; #else - ErrorFlags flags(ErrorMode::ThrowException, true); + ErrorFlags flags(ErrorMode::ThrowException); NazaraError("unhandled window subsystem"); #endif } diff --git a/src/Nazara/Renderer/RenderDevice.cpp b/src/Nazara/Renderer/RenderDevice.cpp index ac7a1360f..144a69608 100644 --- a/src/Nazara/Renderer/RenderDevice.cpp +++ b/src/Nazara/Renderer/RenderDevice.cpp @@ -16,7 +16,7 @@ namespace Nz File file(sourcePath); if (!file.Open(OpenMode::ReadOnly | OpenMode::Text)) { - NazaraError("Failed to open \"" + sourcePath.generic_u8string() + '"'); + NazaraError("Failed to open \"{0}\"", sourcePath); return {}; } diff --git a/src/Nazara/Renderer/Renderer.cpp b/src/Nazara/Renderer/Renderer.cpp index b8a0be322..7d973dae7 100644 --- a/src/Nazara/Renderer/Renderer.cpp +++ b/src/Nazara/Renderer/Renderer.cpp @@ -235,7 +235,7 @@ namespace Nz if (auto it = renderAPIStr.find(value); it != renderAPIStr.end()) preferredAPI = it->second; else - NazaraError("unknown render API \"" + std::string(value) + "\""); + NazaraError("unknown render API \"{0}\"", value); } if (parameters.GetParameter("render-api-validation", &value)) @@ -251,7 +251,7 @@ namespace Nz if (auto it = validationStr.find(value); it != validationStr.end()) validationLevel = it->second; else - NazaraError("unknown validation level \"" + std::string(value) + "\""); + NazaraError("unknown validation level \"{0}\"", value); } } } diff --git a/src/Nazara/Utility/Animation.cpp b/src/Nazara/Utility/Animation.cpp index 4a2d229f3..5b89748de 100644 --- a/src/Nazara/Utility/Animation.cpp +++ b/src/Nazara/Utility/Animation.cpp @@ -68,7 +68,7 @@ namespace Nz auto it = m_impl->sequenceMap.find(sequence.name); if (it != m_impl->sequenceMap.end()) { - NazaraError("Sequence name \"" + sequence.name + "\" is already in use"); + NazaraError("sequence name \"{0}\" is already in use", sequence.name); return false; } #endif diff --git a/src/Nazara/Utility/Components/NodeComponent.cpp b/src/Nazara/Utility/Components/NodeComponent.cpp index c8d39de38..29824fa9b 100644 --- a/src/Nazara/Utility/Components/NodeComponent.cpp +++ b/src/Nazara/Utility/Components/NodeComponent.cpp @@ -29,7 +29,7 @@ namespace Nz std::size_t jointIndex = skeletonComponent->FindJointByName(jointName); if (jointIndex == Skeleton::InvalidJointIndex) { - NazaraError("skeleton has no joint \"" + jointName + "\""); + NazaraError("skeleton has no joint \"{0}\"", jointName); return; } diff --git a/src/Nazara/Utility/Formats/DDSLoader.cpp b/src/Nazara/Utility/Formats/DDSLoader.cpp index 9b8941368..696f5b943 100644 --- a/src/Nazara/Utility/Formats/DDSLoader.cpp +++ b/src/Nazara/Utility/Formats/DDSLoader.cpp @@ -83,7 +83,7 @@ namespace Nz if (byteStream.Read(ptr, byteCount) != byteCount) { - NazaraError("Failed to read level #" + NumberToString(i)); + NazaraError("failed to read level #{0}", NumberToString(i)); return Nz::Err(ResourceLoadingError::DecodingError); } @@ -234,14 +234,14 @@ namespace Nz buf[3] = (header.format.fourCC >> 24) & 255; buf[4] = '\0'; - NazaraError("Unhandled format \"" + std::string(buf) + "\""); + NazaraError("unhandled format \"{0}\"", buf); return false; } } } else { - NazaraError("Invalid DDS file"); + NazaraError("invalid DDS file"); return false; } diff --git a/src/Nazara/Utility/Formats/FreeTypeLoader.cpp b/src/Nazara/Utility/Formats/FreeTypeLoader.cpp index abdd233b5..0e3957872 100644 --- a/src/Nazara/Utility/Formats/FreeTypeLoader.cpp +++ b/src/Nazara/Utility/Formats/FreeTypeLoader.cpp @@ -320,7 +320,7 @@ namespace Nz std::unique_ptr file = std::make_unique(); if (!file->Open(filePath, OpenMode::ReadOnly)) { - NazaraError("Failed to open stream from file: " + Error::GetLastError()); + NazaraError("failed to open stream from file: {0}", Error::GetLastError()); return false; } m_ownedStream = std::move(file); diff --git a/src/Nazara/Utility/Formats/GIFLoader.cpp b/src/Nazara/Utility/Formats/GIFLoader.cpp index 86f2e50fb..595688199 100644 --- a/src/Nazara/Utility/Formats/GIFLoader.cpp +++ b/src/Nazara/Utility/Formats/GIFLoader.cpp @@ -339,7 +339,7 @@ namespace Nz } else if (!hasGlobalColorTable) { - NazaraError("corrupt gif (no color table for image #" + std::to_string(m_frames.size() - 1) + ")"); + NazaraError("corrupt gif (no color table for image #{0}", m_frames.size() - 1); return Err(ResourceLoadingError::DecodingError); } @@ -347,7 +347,7 @@ namespace Nz m_byteStream >> minimumCodeSize; if (minimumCodeSize > 12) { - NazaraError("unexpected LZW Minimum Code Size (" + std::to_string(minimumCodeSize) + ")"); + NazaraError("unexpected LZW Minimum Code Size ({0})", minimumCodeSize); return Err(ResourceLoadingError::DecodingError); } @@ -410,7 +410,7 @@ namespace Nz break; default: - NazaraWarning("unrecognized extension label (unknown tag 0x" + NumberToString(label, 16) + ")"); + NazaraWarning("unrecognized extension label (unknown tag {0:#x})", label); break; } @@ -419,7 +419,7 @@ namespace Nz } default: - NazaraError("corrupt gif (unknown tag 0x" + NumberToString(tag, 16) + ")"); + NazaraError("corrupt gif (unknown tag {0:#x})", tag); return Err(ResourceLoadingError::DecodingError); } } @@ -450,7 +450,7 @@ namespace Nz std::unique_ptr file = std::make_unique(); if (!file->Open(filePath, OpenMode::ReadOnly)) { - NazaraError("Failed to open stream from file: " + Error::GetLastError()); + NazaraError("failed to open stream from file: {0}", Error::GetLastError()); return false; } m_ownedStream = std::move(file); diff --git a/src/Nazara/Utility/Formats/MD5AnimParser.cpp b/src/Nazara/Utility/Formats/MD5AnimParser.cpp index cc5d75333..e60b516db 100644 --- a/src/Nazara/Utility/Formats/MD5AnimParser.cpp +++ b/src/Nazara/Utility/Formats/MD5AnimParser.cpp @@ -208,26 +208,26 @@ namespace Nz std::size_t frameCount = m_frames.size(); if (frameCount == 0) { - NazaraError("Frame count is invalid or missing"); + NazaraError("frame count is invalid or missing"); return false; } std::size_t jointCount = m_joints.size(); if (jointCount == 0) { - NazaraError("Joint count is invalid or missing"); + NazaraError("joint count is invalid or missing"); return false; } if (m_frameIndex != frameCount) { - NazaraError("Missing frame infos: [" + NumberToString(m_frameIndex) + ',' + NumberToString(frameCount) + ']'); + NazaraError("missing frame infos: [{0},{1}]", m_frameIndex, frameCount); return false; } if (m_frameRate == 0) { - NazaraWarning("Framerate is either invalid or missing, assuming a default value of 24"); + NazaraWarning("framerate is either invalid or missing, assuming a default value of 24"); m_frameRate = 24; } @@ -264,7 +264,7 @@ namespace Nz void MD5AnimParser::Error(const std::string& message) { - NazaraError(message + " at line #" + NumberToString(m_lineCount)); + NazaraError("{0} at line #{1}", message, m_lineCount); } bool MD5AnimParser::ParseBaseframe() diff --git a/src/Nazara/Utility/Formats/MD5MeshParser.cpp b/src/Nazara/Utility/Formats/MD5MeshParser.cpp index b85973966..f5988af27 100644 --- a/src/Nazara/Utility/Formats/MD5MeshParser.cpp +++ b/src/Nazara/Utility/Formats/MD5MeshParser.cpp @@ -211,7 +211,7 @@ namespace Nz void MD5MeshParser::Error(const std::string& message) { - NazaraError(message + " at line #" + std::to_string(m_lineCount)); + NazaraError("{0} at line #1", message, m_lineCount); } bool MD5MeshParser::ParseJoints() diff --git a/src/Nazara/Utility/Formats/OBJLoader.cpp b/src/Nazara/Utility/Formats/OBJLoader.cpp index 4a0ec85dd..fcf4ab2dd 100644 --- a/src/Nazara/Utility/Formats/OBJLoader.cpp +++ b/src/Nazara/Utility/Formats/OBJLoader.cpp @@ -32,7 +32,7 @@ namespace Nz File file(filePath); if (!file.Open(OpenMode::ReadOnly | OpenMode::Text)) { - NazaraError("Failed to open MTL file (" + file.GetPath().generic_u8string() + ')'); + NazaraError("failed to open MTL file ({0})", file.GetPath()); return false; } @@ -51,7 +51,7 @@ namespace Nz const MTLParser::Material* mtlMat = materialParser.GetMaterial(matName); if (!mtlMat) { - NazaraWarning("MTL has no material \"" + matName + '"'); + NazaraWarning("MTL has no material \"{0}\"", matName); continue; } @@ -341,7 +341,7 @@ namespace Nz std::filesystem::path mtlLib = parser.GetMtlLib(); if (!mtlLib.empty()) { - ErrorFlags flags(ErrorMode::ThrowExceptionDisabled); + ErrorFlags errFlags({}, ~ErrorMode::ThrowException); ParseMTL(*mesh, stream.GetDirectory() / mtlLib, materials, meshes, meshCount); } diff --git a/src/Nazara/Utility/Formats/OBJSaver.cpp b/src/Nazara/Utility/Formats/OBJSaver.cpp index 6b42f1bba..007736def 100644 --- a/src/Nazara/Utility/Formats/OBJSaver.cpp +++ b/src/Nazara/Utility/Formats/OBJSaver.cpp @@ -65,13 +65,13 @@ namespace Nz if (!mesh.IsValid()) { - NazaraError("Invalid mesh"); + NazaraError("invalid mesh"); return false; } if (mesh.IsAnimable()) { - NazaraError("An animated mesh cannot be saved to " + format + " format"); + NazaraError("an animated mesh cannot be saved to {0} format", format); return false; } diff --git a/src/Nazara/Utility/Formats/PCXLoader.cpp b/src/Nazara/Utility/Formats/PCXLoader.cpp index 8379e6c7b..0edd36665 100644 --- a/src/Nazara/Utility/Formats/PCXLoader.cpp +++ b/src/Nazara/Utility/Formats/PCXLoader.cpp @@ -101,7 +101,7 @@ namespace Nz { if (!stream.Read(&rleValue, 1)) { - NazaraError("Failed to read stream (byte " + NumberToString(stream.GetCursorPos()) + ')'); + NazaraError("failed to read stream (byte {0})", stream.GetCursorPos()); return Err(ResourceLoadingError::DecodingError); } @@ -112,7 +112,7 @@ namespace Nz rleCount = rleValue - 0xc0; if (!stream.Read(&rleValue, 1)) { - NazaraError("Failed to read stream (byte " + NumberToString(stream.GetCursorPos()) + ')'); + NazaraError("failed to read stream (byte {0})", stream.GetCursorPos()); return Err(ResourceLoadingError::DecodingError); } } @@ -156,7 +156,7 @@ namespace Nz { if (!stream.Read(&rleValue, 1)) { - NazaraError("Failed to read stream (byte " + NumberToString(stream.GetCursorPos()) + ')'); + NazaraError("failed to read stream (byte {0})", stream.GetCursorPos()); return Err(ResourceLoadingError::DecodingError); } @@ -167,7 +167,7 @@ namespace Nz rleCount = rleValue - 0xc0; if (!stream.Read(&rleValue, 1)) { - NazaraError("Failed to read stream (byte " + NumberToString(stream.GetCursorPos()) + ')'); + NazaraError("failed to read stream (byte {0})", stream.GetCursorPos()); return Err(ResourceLoadingError::DecodingError); } } @@ -207,14 +207,14 @@ namespace Nz UInt8 magic; if (!stream.Read(&magic, 1)) { - NazaraError("Failed to read stream (byte " + NumberToString(stream.GetCursorPos()) + ')'); + NazaraError("failed to read stream (byte {0})", stream.GetCursorPos()); return Err(ResourceLoadingError::DecodingError); } /* first byte must be equal to 0x0c (12) */ if (magic != 0x0c) { - NazaraError("Colormap's first byte must be 0x0c (0x" + NumberToString(magic, 16) + ')'); + NazaraError("Colormap's first byte must be 0x0c ({0:#x})", magic); return Err(ResourceLoadingError::DecodingError); } @@ -240,7 +240,7 @@ namespace Nz { if (!stream.Read(&rleValue, 1)) { - NazaraError("Failed to read stream (byte " + NumberToString(stream.GetCursorPos()) + ')'); + NazaraError("failed to read stream (byte {0})", stream.GetCursorPos()); return Err(ResourceLoadingError::DecodingError); } @@ -251,7 +251,7 @@ namespace Nz rleCount = rleValue - 0xc0; if (!stream.Read(&rleValue, 1)) { - NazaraError("Failed to read stream (byte " + NumberToString(stream.GetCursorPos()) + ')'); + NazaraError("failed to read stream (byte {0})", stream.GetCursorPos()); return Err(ResourceLoadingError::DecodingError); } } @@ -284,7 +284,7 @@ namespace Nz { if (!stream.Read(&rleValue, 1)) { - NazaraError("Failed to read stream (byte " + NumberToString(stream.GetCursorPos()) + ')'); + NazaraError("failed to read stream (byte {0})", stream.GetCursorPos()); return Err(ResourceLoadingError::DecodingError); } @@ -295,7 +295,7 @@ namespace Nz rleCount = rleValue - 0xc0; if (!stream.Read(&rleValue, 1)) { - NazaraError("Failed to read stream (byte " + NumberToString(stream.GetCursorPos()) + ')'); + NazaraError("failed to read stream (byte {0})", stream.GetCursorPos()); return Err(ResourceLoadingError::DecodingError); } } @@ -311,7 +311,7 @@ namespace Nz } default: - NazaraError("Unsupported " + NumberToString(bitCount) + " bitcount for pcx files"); + NazaraError("unsupported {0} bitcount for pcx files", bitCount); return Err(ResourceLoadingError::DecodingError); } diff --git a/src/Nazara/Utility/Formats/STBLoader.cpp b/src/Nazara/Utility/Formats/STBLoader.cpp index cc540e258..7f478323a 100644 --- a/src/Nazara/Utility/Formats/STBLoader.cpp +++ b/src/Nazara/Utility/Formats/STBLoader.cpp @@ -64,7 +64,7 @@ namespace Nz UInt8* ptr = stbi_load_from_callbacks(&s_stbiCallbacks, &stream, &width, &height, &bpp, STBI_rgb_alpha); if (!ptr) { - NazaraError("Failed to load image: " + std::string(stbi_failure_reason())); + NazaraError("failed to load image: {0}", std::string(stbi_failure_reason())); return Err(ResourceLoadingError::DecodingError); } diff --git a/src/Nazara/Utility/Formats/STBSaver.cpp b/src/Nazara/Utility/Formats/STBSaver.cpp index 78ab4ee66..81b19bc97 100644 --- a/src/Nazara/Utility/Formats/STBSaver.cpp +++ b/src/Nazara/Utility/Formats/STBSaver.cpp @@ -113,13 +113,13 @@ namespace Nz int componentCount = ConvertToIntegerFormat(tempImage); if (componentCount == 0) { - NazaraError("Failed to convert image to suitable format"); + NazaraError("failed to convert image to suitable format"); return false; } if (!stbi_write_bmp_to_func(&WriteToStream, &stream, tempImage.GetWidth(), tempImage.GetHeight(), componentCount, tempImage.GetConstPixels())) { - NazaraError("Failed to write BMP to stream"); + NazaraError("failed to write BMP to stream"); return false; } @@ -133,20 +133,20 @@ namespace Nz int componentCount = ConvertToIntegerFormat(tempImage); if (componentCount == 0) { - NazaraError("Failed to convert image to suitable format"); + NazaraError("failed to convert image to suitable format"); return false; } long long imageQuality = parameters.custom.GetIntegerParameter("JPEGQuality").GetValueOr(100); if (imageQuality <= 0 || imageQuality > 100) { - NazaraError("NativeJPEGSaver_Quality value (" + Nz::NumberToString(imageQuality) + ") does not fit in bounds ]0, 100], clamping..."); + NazaraError("NativeJPEGSaver_Quality value ({0}) does not fit in bounds ]0, 100], clamping...", imageQuality); imageQuality = Nz::Clamp(imageQuality, 1LL, 100LL); } if (!stbi_write_jpg_to_func(&WriteToStream, &stream, tempImage.GetWidth(), tempImage.GetHeight(), componentCount, tempImage.GetConstPixels(), int(imageQuality))) { - NazaraError("Failed to write JPEG to stream"); + NazaraError("failed to write JPEG to stream"); return false; } @@ -248,7 +248,7 @@ namespace Nz ImageType type = image.GetType(); if (type != ImageType::E1D && type != ImageType::E2D) { - NazaraError("Image type 0x" + NumberToString(UnderlyingCast(type), 16) + " is not in a supported format"); + NazaraError("Image type {0:#x}) is not in a supported format", UnderlyingCast(type)); return false; } diff --git a/src/Nazara/Utility/GuillotineImageAtlas.cpp b/src/Nazara/Utility/GuillotineImageAtlas.cpp index 609d39477..7d15beee4 100644 --- a/src/Nazara/Utility/GuillotineImageAtlas.cpp +++ b/src/Nazara/Utility/GuillotineImageAtlas.cpp @@ -63,7 +63,7 @@ namespace Nz #if NAZARA_UTILITY_SAFE if (layerIndex >= m_layers.size()) { - NazaraError("Layer index out of range (" + NumberToString(layerIndex) + " >= " + NumberToString(m_layers.size()) + ')'); + NazaraError("layer index out of range ({0} >= {1})", layerIndex, m_layers.size()); return nullptr; } #endif diff --git a/src/Nazara/Utility/Image.cpp b/src/Nazara/Utility/Image.cpp index 6ede60b79..0c82e7d2c 100644 --- a/src/Nazara/Utility/Image.cpp +++ b/src/Nazara/Utility/Image.cpp @@ -94,7 +94,7 @@ namespace Nz if (!PixelFormatInfo::IsConversionSupported(m_sharedImage->format, newFormat)) { - NazaraError("Conversion from " + std::string(PixelFormatInfo::GetName(m_sharedImage->format)) + " to " + std::string(PixelFormatInfo::GetName(newFormat)) + " is not supported"); + NazaraError("Conversion from {0} to {1} is not supported", PixelFormatInfo::GetName(m_sharedImage->format), PixelFormatInfo::GetName(newFormat)); return false; } #endif @@ -275,7 +275,7 @@ namespace Nz } catch (const std::exception& e) { - NazaraError("Failed to allocate image's level " + NumberToString(i) + " (" + std::string(e.what()) + ')'); + NazaraError("Failed to allocate image's level {0} ({1})", i, e.what()); return false; } } @@ -313,7 +313,7 @@ namespace Nz std::unique_ptr colorBuffer(new UInt8[bpp]); if (!PixelFormatInfo::Convert(PixelFormat::RGBA8, m_sharedImage->format, &color.r, colorBuffer.get())) { - NazaraError("Failed to convert RGBA8 to " + std::string(PixelFormatInfo::GetName(m_sharedImage->format))); + NazaraError("failed to convert RGBA8 to {0}", std::string(PixelFormatInfo::GetName(m_sharedImage->format))); return false; } @@ -391,7 +391,7 @@ namespace Nz std::unique_ptr colorBuffer(new UInt8[bpp]); if (!PixelFormatInfo::Convert(PixelFormat::RGBA8, m_sharedImage->format, &color.r, colorBuffer.get())) { - NazaraError("Failed to convert RGBA8 to " + std::string(PixelFormatInfo::GetName(m_sharedImage->format))); + NazaraError("failed to convert RGBA8 to {0}", std::string(PixelFormatInfo::GetName(m_sharedImage->format))); return false; } @@ -452,7 +452,7 @@ namespace Nz unsigned int depth = (m_sharedImage->type == ImageType::Cubemap) ? 6 : m_sharedImage->depth; if (z >= depth) { - NazaraError("Z value exceeds depth (" + NumberToString(z) + " >= " + NumberToString(depth) + ')'); + NazaraError("Z value exceeds depth ({0} >= {1})", NumberToString(z), NumberToString(depth)); return false; } #endif @@ -463,7 +463,7 @@ namespace Nz std::unique_ptr colorBuffer(new UInt8[bpp]); if (!PixelFormatInfo::Convert(PixelFormat::RGBA8, m_sharedImage->format, &color.r, colorBuffer.get())) { - NazaraError("Failed to convert RGBA8 to " + std::string(PixelFormatInfo::GetName(m_sharedImage->format))); + NazaraError("failed to convert RGBA8 to {0}", std::string(PixelFormatInfo::GetName(m_sharedImage->format))); return false; } @@ -578,7 +578,7 @@ namespace Nz if (level >= m_sharedImage->levels.size()) { - NazaraError("Level out of bounds (" + NumberToString(level) + " >= " + NumberToString(m_sharedImage->levels.size()) + ')'); + NazaraError("Level out of bounds ({0} >= {1})", NumberToString(level), NumberToString(m_sharedImage->levels.size())); return nullptr; } #endif @@ -587,7 +587,7 @@ namespace Nz #if NAZARA_UTILITY_SAFE if (x >= width) { - NazaraError("X value exceeds width (" + NumberToString(x) + " >= " + NumberToString(width) + ')'); + NazaraError("X value exceeds width ({0} >= {1})", NumberToString(x), NumberToString(width)); return nullptr; } #endif @@ -596,14 +596,14 @@ namespace Nz #if NAZARA_UTILITY_SAFE if (y >= height) { - NazaraError("Y value exceeds height (" + NumberToString(y) + " >= " + NumberToString(height) + ')'); + NazaraError("Y value exceeds height ({0} >= {1})", NumberToString(y), NumberToString(height)); return nullptr; } unsigned int depth = (m_sharedImage->type == ImageType::Cubemap) ? 6 : GetImageLevelSize(m_sharedImage->depth, level); if (z >= depth) { - NazaraError("Z value exceeds depth (" + NumberToString(z) + " >= " + NumberToString(depth) + ')'); + NazaraError("Z value exceeds depth ({0} >= {1})", NumberToString(z), NumberToString(depth)); return nullptr; } #endif @@ -616,7 +616,7 @@ namespace Nz #if NAZARA_UTILITY_SAFE if (level >= m_sharedImage->levels.size()) { - NazaraError("Level out of bounds (" + NumberToString(level) + " >= " + NumberToString(m_sharedImage->levels.size()) + ')'); + NazaraError("Level out of bounds ({0} >= {1})", NumberToString(level), NumberToString(m_sharedImage->levels.size())); return 0; } #endif @@ -634,7 +634,7 @@ namespace Nz #if NAZARA_UTILITY_SAFE if (level >= m_sharedImage->levels.size()) { - NazaraError("Level out of bounds (" + NumberToString(level) + " >= " + NumberToString(m_sharedImage->levels.size()) + ')'); + NazaraError("Level out of bounds ({0} >= {1})", NumberToString(level), NumberToString(m_sharedImage->levels.size())); return 0; } #endif @@ -701,20 +701,20 @@ namespace Nz if (x >= m_sharedImage->width) { - NazaraError("X value exceeds width (" + NumberToString(x) + " >= " + NumberToString(m_sharedImage->width) + ')'); + NazaraError("X value exceeds width ({0} >= {1})", NumberToString(x), NumberToString(m_sharedImage->width)); return Color(); } if (y >= m_sharedImage->height) { - NazaraError("Y value exceeds height (" + NumberToString(y) + " >= " + NumberToString(m_sharedImage->height) + ')'); + NazaraError("Y value exceeds height ({0} >= {1})", NumberToString(y), NumberToString(m_sharedImage->height)); return Color(); } unsigned int depth = (m_sharedImage->type == ImageType::Cubemap) ? 6 : m_sharedImage->depth; if (z >= depth) { - NazaraError("Z value exceeds depth (" + NumberToString(z) + " >= " + NumberToString(depth) + ')'); + NazaraError("Z value exceeds depth ({0} >= {1})", NumberToString(z), NumberToString(depth)); return Color(); } #endif @@ -739,7 +739,7 @@ namespace Nz if (level >= m_sharedImage->levels.size()) { - NazaraError("Level out of bounds (" + NumberToString(level) + " >= " + NumberToString(m_sharedImage->levels.size()) + ')'); + NazaraError("Level out of bounds ({0} >= {1})", NumberToString(level), NumberToString(m_sharedImage->levels.size())); return nullptr; } #endif @@ -748,7 +748,7 @@ namespace Nz #if NAZARA_UTILITY_SAFE if (x >= width) { - NazaraError("X value exceeds width (" + NumberToString(x) + " >= " + NumberToString(width) + ')'); + NazaraError("X value exceeds width ({0} >= {1})", NumberToString(x), NumberToString(width)); return nullptr; } #endif @@ -757,20 +757,20 @@ namespace Nz #if NAZARA_UTILITY_SAFE if (y >= height) { - NazaraError("Y value exceeds height (" + NumberToString(y) + " >= " + NumberToString(height) + ')'); + NazaraError("Y value exceeds height ({0} >= {1})", NumberToString(y), NumberToString(height)); return nullptr; } unsigned int depth = (m_sharedImage->type == ImageType::Cubemap) ? 6 : GetImageLevelSize(m_sharedImage->depth, level); if (z >= depth) { - NazaraError("Z value exceeds depth (" + NumberToString(z) + " >= " + NumberToString(depth) + ')'); + NazaraError("Z value exceeds depth ({0} >= {1})", NumberToString(z), NumberToString(depth)); return nullptr; } if (level >= m_sharedImage->levels.size()) { - NazaraError("Level out of bounds (" + NumberToString(level) + " >= " + NumberToString(m_sharedImage->levels.size()) + ')'); + NazaraError("Level out of bounds ({0} >= {1})", NumberToString(level), NumberToString(m_sharedImage->levels.size())); return nullptr; } #endif @@ -785,7 +785,7 @@ namespace Nz #if NAZARA_UTILITY_SAFE if (level >= m_sharedImage->levels.size()) { - NazaraError("Level out of bounds (" + NumberToString(level) + " >= " + NumberToString(m_sharedImage->levels.size()) + ')'); + NazaraError("Level out of bounds ({0} >= {1})", NumberToString(level), NumberToString(m_sharedImage->levels.size())); return Vector3ui::Zero(); } #endif @@ -803,7 +803,7 @@ namespace Nz #if NAZARA_UTILITY_SAFE if (level >= m_sharedImage->levels.size()) { - NazaraError("Level out of bounds (" + NumberToString(level) + " >= " + NumberToString(m_sharedImage->levels.size()) + ')'); + NazaraError("Level out of bounds ({0} >= {1})", NumberToString(level), NumberToString(m_sharedImage->levels.size())); return 0; } #endif @@ -889,7 +889,7 @@ namespace Nz #if NAZARA_UTILITY_SAFE if (type != ImageType::E1D && type != ImageType::E2D) { - NazaraError("Image type not handled (0x" + NumberToString(UnderlyingCast(type), 16) + ')'); + NazaraError("Image type not handled ({0:#x})", UnderlyingCast(type)); return nullptr; } #endif @@ -975,7 +975,7 @@ namespace Nz ImageType type = image.GetType(); if (type != ImageType::E2D) { - NazaraError("Image type not handled (0x" + NumberToString(UnderlyingCast(type), 16) + ')'); + NazaraError("Image type not handled ({0:#x})", UnderlyingCast(type)); return nullptr; } #endif @@ -1202,20 +1202,20 @@ namespace Nz if (x >= m_sharedImage->width) { - NazaraError("X value exceeds width (" + NumberToString(x) + " >= " + NumberToString(m_sharedImage->width) + ')'); + NazaraError("X value exceeds width ({0} >= {1})", NumberToString(x), NumberToString(m_sharedImage->width)); return false; } if (y >= m_sharedImage->height) { - NazaraError("Y value exceeds height (" + NumberToString(y) + " >= " + NumberToString(m_sharedImage->height) + ')'); + NazaraError("Y value exceeds height ({0} >= {1})", NumberToString(y), NumberToString(m_sharedImage->height)); return false; } unsigned int depth = (m_sharedImage->type == ImageType::Cubemap) ? 6 : m_sharedImage->depth; if (z >= depth) { - NazaraError("Z value exceeds depth (" + NumberToString(z) + " >= " + NumberToString(depth) + ')'); + NazaraError("Z value exceeds depth ({0} >= {1})", NumberToString(z), NumberToString(depth)); return false; } #endif @@ -1248,7 +1248,7 @@ namespace Nz if (level >= m_sharedImage->levels.size()) { - NazaraError("Level out of bounds (" + NumberToString(level) + " >= " + NumberToString(m_sharedImage->levels.size()) + ')'); + NazaraError("Level out of bounds ({0} >= {1})", NumberToString(level), NumberToString(m_sharedImage->levels.size())); return false; } #endif @@ -1372,7 +1372,7 @@ namespace Nz return GetMaxLevel(width, height, depth); } - NazaraError("Image type not handled (0x" + NumberToString(UnderlyingCast(type), 16) + ')'); + NazaraError("Image type not handled ({0:#x})", UnderlyingCast(type)); return 0; } diff --git a/src/Nazara/Utility/PixelFormat.cpp b/src/Nazara/Utility/PixelFormat.cpp index 0fb47097f..703a69f5e 100644 --- a/src/Nazara/Utility/PixelFormat.cpp +++ b/src/Nazara/Utility/PixelFormat.cpp @@ -1588,7 +1588,7 @@ namespace Nz for (auto&& [pixelFormat, pixelFormatInfo] : s_pixelFormatInfos.iter_kv()) { if (!pixelFormatInfo.Validate()) - NazaraWarning("Pixel format 0x" + NumberToString(UnderlyingCast(pixelFormat), 16) + " (" + std::string(GetName(pixelFormat)) + ") failed validation tests"); + NazaraWarning("Pixel format {0:#x} {1} failed validation tests", UnderlyingCast(pixelFormat), GetName(pixelFormat)); } /***********************************A8************************************/ diff --git a/src/Nazara/Utility/SubMesh.cpp b/src/Nazara/Utility/SubMesh.cpp index 090770728..3b7b8c97a 100644 --- a/src/Nazara/Utility/SubMesh.cpp +++ b/src/Nazara/Utility/SubMesh.cpp @@ -185,7 +185,7 @@ namespace Nz return indexCount - 2; } - NazaraError("Primitive mode not handled (0x" + NumberToString(UnderlyingCast(m_primitiveMode), 16) + ')'); + NazaraError("Primitive mode not handled ({0:#x})", UnderlyingCast(m_primitiveMode)); return 0; } diff --git a/src/Nazara/Utility/VertexDeclaration.cpp b/src/Nazara/Utility/VertexDeclaration.cpp index 3f5a242f2..1ddbf9820 100644 --- a/src/Nazara/Utility/VertexDeclaration.cpp +++ b/src/Nazara/Utility/VertexDeclaration.cpp @@ -89,7 +89,7 @@ namespace Nz return true; } - NazaraError("Component type not handled (0x" + NumberToString(UnderlyingCast(type), 16) + ')'); + NazaraError("Component type not handled ({0:#x})", UnderlyingCast(type)); return false; } @@ -337,7 +337,7 @@ namespace Nz } catch (const std::exception& e) { - NazaraError("Failed to initialize vertex declaration: " + std::string(e.what())); + NazaraError("failed to initialize vertex declaration: {0}", std::string(e.what())); return false; } diff --git a/src/Nazara/Utility/VertexMapper.cpp b/src/Nazara/Utility/VertexMapper.cpp index 925b91927..f1e80593a 100644 --- a/src/Nazara/Utility/VertexMapper.cpp +++ b/src/Nazara/Utility/VertexMapper.cpp @@ -14,7 +14,7 @@ namespace Nz { VertexMapper::VertexMapper(SubMesh& subMesh) { - ErrorFlags flags(ErrorMode::ThrowException, true); + ErrorFlags flags(ErrorMode::ThrowException); std::shared_ptr buffer = nullptr; switch (subMesh.GetAnimationType()) @@ -36,7 +36,7 @@ namespace Nz if (!buffer) { - NazaraInternalError("Animation type not handled (0x" + NumberToString(UnderlyingCast(subMesh.GetAnimationType()), 16) + ')'); + NazaraInternalError("Animation type not handled ({0:#x})", UnderlyingCast(subMesh.GetAnimationType())); } m_mapper.Map(*buffer, 0, buffer->GetVertexCount()); @@ -44,7 +44,7 @@ namespace Nz VertexMapper::VertexMapper(VertexBuffer& vertexBuffer) { - ErrorFlags flags(ErrorMode::ThrowException, true); + ErrorFlags flags(ErrorMode::ThrowException); m_mapper.Map(vertexBuffer, 0, vertexBuffer.GetVertexCount()); } diff --git a/src/Nazara/VulkanRenderer/Vulkan.cpp b/src/Nazara/VulkanRenderer/Vulkan.cpp index c320af314..1665e0d7a 100644 --- a/src/Nazara/VulkanRenderer/Vulkan.cpp +++ b/src/Nazara/VulkanRenderer/Vulkan.cpp @@ -322,7 +322,7 @@ namespace Nz if (!s_instance.Create(validationLevel, instanceInfo)) { - NazaraError("Failed to create instance: " + TranslateVulkanError(s_instance.GetLastErrorCode())); + NazaraError("failed to create instance: {0}", TranslateVulkanError(s_instance.GetLastErrorCode())); return false; } @@ -606,7 +606,7 @@ namespace Nz std::shared_ptr device = std::make_shared(s_instance, enabledFeatures, BuildRenderDeviceInfo(deviceInfo)); if (!device->Create(deviceInfo, createInfo)) { - NazaraError("Failed to create Vulkan Device: " + TranslateVulkanError(device->GetLastErrorCode())); + NazaraError("failed to create Vulkan Device: {0}", TranslateVulkanError(device->GetLastErrorCode())); return {}; } diff --git a/src/Nazara/VulkanRenderer/VulkanBuffer.cpp b/src/Nazara/VulkanRenderer/VulkanBuffer.cpp index 20414d619..00e76c963 100644 --- a/src/Nazara/VulkanRenderer/VulkanBuffer.cpp +++ b/src/Nazara/VulkanRenderer/VulkanBuffer.cpp @@ -79,7 +79,7 @@ namespace Nz VkResult result = vmaMapMemory(m_device.GetMemoryAllocator(), m_allocation, &mappedPtr); if (result != VK_SUCCESS) { - NazaraError("Failed to map buffer: " + TranslateVulkanError(result)); + NazaraError("failed to map buffer: {0}", TranslateVulkanError(result)); return nullptr; } @@ -101,7 +101,7 @@ namespace Nz VkResult result = vmaCreateBuffer(m_device.GetMemoryAllocator(), &createInfo, &allocInfo, &m_stagingBuffer, &m_stagingAllocation, &allocationInfo); if (result != VK_SUCCESS) { - NazaraError("Failed to allocate staging buffer: " + TranslateVulkanError(result)); + NazaraError("failed to allocate staging buffer: {0}", TranslateVulkanError(result)); return nullptr; } diff --git a/src/Nazara/VulkanRenderer/VulkanSwapchain.cpp b/src/Nazara/VulkanRenderer/VulkanSwapchain.cpp index 7ee00aa30..39dfe474b 100644 --- a/src/Nazara/VulkanRenderer/VulkanSwapchain.cpp +++ b/src/Nazara/VulkanRenderer/VulkanSwapchain.cpp @@ -483,7 +483,7 @@ namespace Nz if (!framebuffer.Create(*m_swapchain.GetDevice(), frameBufferCreate)) { - NazaraError("Failed to create framebuffer for image #" + NumberToString(i) + ": " + TranslateVulkanError(framebuffer.GetLastErrorCode())); + NazaraError("failed to create framebuffer for image #{0}: {1}", i, TranslateVulkanError(framebuffer.GetLastErrorCode())); return false; } @@ -495,10 +495,11 @@ namespace Nz bool VulkanSwapchain::SetupRenderPass() { + NazaraError("Test"); std::optional colorFormat = FromVulkan(m_surfaceFormat.format); if (!colorFormat) { - NazaraError("unhandled vulkan pixel format (0x" + NumberToString(m_surfaceFormat.format, 16) + ")"); + NazaraError("unhandled vulkan pixel format ({0:#x})", UnderlyingCast(m_surfaceFormat.format)); return false; } @@ -508,7 +509,7 @@ namespace Nz depthStencilFormat = FromVulkan(m_depthStencilFormat); if (!depthStencilFormat) { - NazaraError("unhandled vulkan pixel format (0x" + NumberToString(m_depthStencilFormat, 16) + ")"); + NazaraError("unhandled vulkan pixel format ({0:#x})", UnderlyingCast(m_depthStencilFormat)); return false; } } @@ -579,7 +580,7 @@ namespace Nz if (!success) { - NazaraError("Failed to create Vulkan surface: " + TranslateVulkanError(m_surface.GetLastErrorCode())); + NazaraError("failed to create Vulkan surface: {0}", TranslateVulkanError(m_surface.GetLastErrorCode())); return false; } @@ -640,7 +641,7 @@ namespace Nz Vk::Swapchain newSwapchain; if (!newSwapchain.Create(m_device, swapchainInfo)) { - NazaraError("failed to create swapchain: " + TranslateVulkanError(newSwapchain.GetLastErrorCode())); + NazaraError("failed to create swapchain: {0}", TranslateVulkanError(newSwapchain.GetLastErrorCode())); return false; } diff --git a/src/Nazara/VulkanRenderer/Wrapper/Device.cpp b/src/Nazara/VulkanRenderer/Wrapper/Device.cpp index 27a8b6ddd..0e8d881ea 100644 --- a/src/Nazara/VulkanRenderer/Wrapper/Device.cpp +++ b/src/Nazara/VulkanRenderer/Wrapper/Device.cpp @@ -57,7 +57,7 @@ namespace Nz m_lastErrorCode = m_instance.vkCreateDevice(deviceInfo.physDevice, &createInfo, allocator, &m_device); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to create Vulkan device: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to create Vulkan device: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -81,7 +81,7 @@ namespace Nz // Load all device-related functions try { - ErrorFlags flags(ErrorMode::ThrowException, true); + ErrorFlags flags(ErrorMode::ThrowException); UInt32 deviceVersion = deviceInfo.properties.apiVersion; @@ -103,7 +103,7 @@ namespace Nz } catch (const std::exception& e) { - NazaraError(std::string("Failed to query device function: ") + e.what()); + NazaraError("Failed to query device function: {0}", e.what()); return false; } @@ -173,7 +173,7 @@ namespace Nz Vk::CommandPool& commandPool = m_internalData->commandPools[queueType]; if (!commandPool.Create(*this, m_defaultQueues[queueType], VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)) { - NazaraError("Failed to create command pool: " + TranslateVulkanError(commandPool.GetLastErrorCode())); + NazaraError("failed to create command pool: {0}", TranslateVulkanError(commandPool.GetLastErrorCode())); return false; } } @@ -237,7 +237,7 @@ namespace Nz m_lastErrorCode = vmaCreateAllocator(&allocatorInfo, &m_memAllocator); if (m_lastErrorCode != VK_SUCCESS) { - NazaraError("Failed to initialize Vulkan Memory Allocator (VMA): " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to initialize Vulkan Memory Allocator (VMA): {0}", TranslateVulkanError(m_lastErrorCode)); return false; } diff --git a/src/Nazara/VulkanRenderer/Wrapper/Instance.cpp b/src/Nazara/VulkanRenderer/Wrapper/Instance.cpp index 133fcc1ef..46bfdd40f 100644 --- a/src/Nazara/VulkanRenderer/Wrapper/Instance.cpp +++ b/src/Nazara/VulkanRenderer/Wrapper/Instance.cpp @@ -144,7 +144,7 @@ namespace Nz::Vk m_lastErrorCode = Loader::vkCreateInstance(&createInfo, allocator, &m_instance); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to create Vulkan instance: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to create Vulkan instance: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -167,7 +167,7 @@ namespace Nz::Vk // And now load everything try { - ErrorFlags flags(ErrorMode::ThrowException, true); + ErrorFlags flags(ErrorMode::ThrowException); #define NAZARA_VULKANRENDERER_INSTANCE_EXT_BEGIN(ext) if (IsExtensionLoaded(#ext)) { \ NazaraDebug(#ext " extension is supported"); @@ -186,7 +186,7 @@ namespace Nz::Vk } catch (const std::exception& e) { - NazaraError(std::string("Failed to query instance function: ") + e.what()); + NazaraError("Failed to query instance function: {0}", e.what()); return false; } @@ -205,7 +205,7 @@ namespace Nz::Vk m_lastErrorCode = vkEnumeratePhysicalDevices(m_instance, &deviceCount, nullptr); if (m_lastErrorCode != VkResult::VK_SUCCESS || deviceCount == 0) { - NazaraError("Failed to query physical device count: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to query physical device count: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -214,7 +214,7 @@ namespace Nz::Vk m_lastErrorCode = vkEnumeratePhysicalDevices(m_instance, &deviceCount, devices->data()); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to query physical devices: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to query physical devices: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -230,7 +230,7 @@ namespace Nz::Vk m_lastErrorCode = vkEnumerateDeviceExtensionProperties(device, nullptr, &extensionPropertyCount, nullptr); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to query extension properties count: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to query extension properties count: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } @@ -242,7 +242,7 @@ namespace Nz::Vk m_lastErrorCode = vkEnumerateDeviceExtensionProperties(device, nullptr, &extensionPropertyCount, extensionProperties->data()); if (m_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to query extension properties count: " + TranslateVulkanError(m_lastErrorCode)); + NazaraError("failed to query extension properties count: {0}", TranslateVulkanError(m_lastErrorCode)); return false; } diff --git a/src/Nazara/VulkanRenderer/Wrapper/Loader.cpp b/src/Nazara/VulkanRenderer/Wrapper/Loader.cpp index 9d3d2e983..6989e9cf6 100644 --- a/src/Nazara/VulkanRenderer/Wrapper/Loader.cpp +++ b/src/Nazara/VulkanRenderer/Wrapper/Loader.cpp @@ -21,7 +21,7 @@ namespace Nz s_lastErrorCode = vkEnumerateInstanceExtensionProperties(layerName, &propertyCount, nullptr); if (s_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to get instance extension properties count: " + TranslateVulkanError(s_lastErrorCode)); + NazaraError("failed to get instance extension properties count: {0}", TranslateVulkanError(s_lastErrorCode)); return false; } @@ -30,7 +30,7 @@ namespace Nz s_lastErrorCode = vkEnumerateInstanceExtensionProperties(layerName, &propertyCount, properties->data()); if (s_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to enumerate instance extension properties: " + TranslateVulkanError(s_lastErrorCode)); + NazaraError("failed to enumerate instance extension properties: {0}", TranslateVulkanError(s_lastErrorCode)); return false; } @@ -46,7 +46,7 @@ namespace Nz s_lastErrorCode = vkEnumerateInstanceLayerProperties(&propertyCount, nullptr); if (s_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to get instance layer properties count: " + TranslateVulkanError(s_lastErrorCode)); + NazaraError("failed to get instance layer properties count: {0}", TranslateVulkanError(s_lastErrorCode)); return false; } @@ -55,7 +55,7 @@ namespace Nz s_lastErrorCode = vkEnumerateInstanceLayerProperties(&propertyCount, properties->data()); if (s_lastErrorCode != VkResult::VK_SUCCESS) { - NazaraError("Failed to enumerate instance layer properties: " + TranslateVulkanError(s_lastErrorCode)); + NazaraError("failed to enumerate instance layer properties: {0}", TranslateVulkanError(s_lastErrorCode)); return false; } @@ -76,7 +76,7 @@ namespace Nz if (!s_vulkanLib.IsLoaded()) { - NazaraError("Failed to open vulkan library: " + s_vulkanLib.GetLastError()); + NazaraError("failed to open vulkan library: {0}", s_vulkanLib.GetLastError()); return false; } @@ -84,7 +84,7 @@ namespace Nz vkGetInstanceProcAddr = reinterpret_cast(s_vulkanLib.GetSymbol("vkGetInstanceProcAddr")); if (!vkGetInstanceProcAddr) { - NazaraError("Failed to get symbol \"vkGetInstanceProcAddr\": " + s_vulkanLib.GetLastError()); + NazaraError("Failed to get symbol \"vkGetInstanceProcAddr\": {0}", s_vulkanLib.GetLastError()); return false; } @@ -92,7 +92,7 @@ namespace Nz { PFN_vkVoidFunction func = vkGetInstanceProcAddr(nullptr, name); if (!func && !opt) - NazaraError("Failed to get " + std::string(name) + " address"); + NazaraError("Failed to get {0} address", name); return func; }; @@ -101,7 +101,7 @@ namespace Nz #define NAZARA_VULKANRENDERER_LOAD_GLOBAL(func) func = reinterpret_cast(GetProcAddr(#func)) try { - ErrorFlags flags(ErrorMode::ThrowException, true); + ErrorFlags flags(ErrorMode::ThrowException); #define NAZARA_VULKANRENDERER_GLOBAL_FUNCTION(func) func = reinterpret_cast(GetProcAddr(#func, false)); #define NAZARA_VULKANRENDERER_GLOBAL_FUNCTION_OPT(func) func = reinterpret_cast(GetProcAddr(#func, true)); @@ -111,7 +111,7 @@ namespace Nz } catch (const std::exception& e) { - NazaraError(std::string("Failed to query device function: ") + e.what()); + NazaraError("Failed to query device function: {0}", e.what()); return false; } diff --git a/tests/UnitTests/Engine/Core/ErrorTest.cpp b/tests/UnitTests/Engine/Core/ErrorTest.cpp index d1812a4bb..7e58360a2 100644 --- a/tests/UnitTests/Engine/Core/ErrorTest.cpp +++ b/tests/UnitTests/Engine/Core/ErrorTest.cpp @@ -12,15 +12,15 @@ SCENARIO("Error", "[CORE][ERROR]") { THEN("These errors should be written in the log file") { - Nz::Error::Trigger(Nz::ErrorType::Internal, "ErrorType::Internal"); - Nz::Error::Trigger(Nz::ErrorType::Internal, "ErrorType::Internal", 2, "Error.cpp", "2nd place Internal"); + Nz::Error::Trigger(Nz::ErrorType::Internal, "ErrorType::{0}", "Internal"); + Nz::Error::Trigger(Nz::ErrorType::Internal, 2, "Error.cpp", "2nd place Internal", "ErrorType::{0}", "Internal"); REQUIRE("ErrorType::Internal" == Nz::Error::GetLastError()); - Nz::Error::Trigger(Nz::ErrorType::Normal, "ErrorType::Normal"); - Nz::Error::Trigger(Nz::ErrorType::Normal, "ErrorType::Normal", 2, "Error.cpp", "2nd place Normal"); + Nz::Error::Trigger(Nz::ErrorType::Normal, "ErrorType::{1}{0}", "mal", "Nor"); + Nz::Error::Trigger(Nz::ErrorType::Normal, 2, "Error.cpp", "2nd place Normal", "ErrorType::{1}{0}", "rmal", "Nor"); REQUIRE("ErrorType::Normal" == Nz::Error::GetLastError()); Nz::Error::Trigger(Nz::ErrorType::Warning, "ErrorType::Warning"); Nz::Error::Trigger(Nz::ErrorType::Warning, "ErrorType::Warning", 2, "Error.cpp", "2nd place Warning"); - REQUIRE("ErrorType::Warning" == Nz::Error::GetLastError()); + REQUIRE("ErrorType::Normal" == Nz::Error::GetLastError()); //< Warning are not captured by GetLastError } } } diff --git a/xmake.lua b/xmake.lua index 06def09dc..1a64b3208 100644 --- a/xmake.lua +++ b/xmake.lua @@ -127,7 +127,6 @@ local modules = { Network = { Option = "network", Deps = {"NazaraCore"}, - Packages = { "fmt" }, Custom = function () if not is_plat("wasm") then if has_config("link_curl") then @@ -519,6 +518,9 @@ for name, module in pairs(modules) do add_deps(table.unpack(module.Deps)) end + -- fmt is a special package that is not public but required by all Nazara modules + add_packages("fmt") + if module.Packages then add_packages(table.unpack(module.Packages)) end