Allow error message to be formatted

This commit is contained in:
SirLynix
2023-08-14 23:16:37 +02:00
committed by Jérôme Leclercq
parent 25957c4b7f
commit a741672a51
119 changed files with 707 additions and 490 deletions

View File

@@ -105,7 +105,7 @@ namespace Nz
using Param = std::decay_t<decltype(arg)>;
if constexpr (std::is_base_of_v<VirtualDirectory::DirectoryEntry, Param>)
{
NazaraError(std::string(assetPath) + " is a directory");
NazaraError("{} is a directory", assetPath);
return false;
}
else if constexpr (std::is_same_v<Param, VirtualDirectory::FileEntry>)
@@ -136,7 +136,7 @@ namespace Nz
using Param = std::decay_t<decltype(arg)>;
if constexpr (std::is_base_of_v<VirtualDirectory::DirectoryEntry, Param>)
{
NazaraError(std::string(assetPath) + " is a directory");
NazaraError("{} is a directory", assetPath);
return false;
}
else if constexpr (std::is_same_v<Param, VirtualDirectory::FileEntry>)

View File

@@ -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<ErrorMode>;
constexpr ErrorModeFlags ErrorMode_Default = {};
enum class ErrorType
{
AssertFailed,

View File

@@ -10,17 +10,18 @@
#include <NazaraUtils/Prerequisites.hpp>
#include <Nazara/Core/Config.hpp>
#include <Nazara/Core/Enums.hpp>
#include <Nazara/Core/ToString.hpp>
#include <string>
#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<typename... Args> static void Trigger(ErrorType type, std::string_view error, Args&&... args);
template<typename... Args> 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 <Nazara/Core/Error.inl>
#endif // NAZARA_CORE_ERROR_HPP

View File

@@ -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<typename... Args>
void Error::Trigger(ErrorType type, std::string_view error, Args&&... args)
{
return TriggerInternal(type, Format(error, std::forward<Args>(args)...), 0, {}, {});
}
template<typename... Args>
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>(args)...), line, GetCurrentFileRelativeToEngine(file), function);
}
}

View File

@@ -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;

View File

@@ -15,12 +15,12 @@
#include <string>
#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<typename... Args> 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 <Nazara/Core/Log.inl>
#endif // NAZARA_CORE_LOG_HPP

View File

@@ -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 <Nazara/Core/ToString.hpp>
#include <Nazara/Core/Debug.hpp>
namespace Nz
{
template<typename... Args>
void Log::Write(std::string_view str, Args&&... args)
{
return Write(Format(str, std::forward<Args>(args)...));
}
}
#include <Nazara/Core/DebugOff.hpp>

View File

@@ -35,7 +35,7 @@ namespace Nz
{
std::shared_ptr<Type> ref = Query(name);
if (!ref)
NazaraError("Object \"" + name + "\" is not present");
NazaraError("Object \"{}\" is not present", name);
return ref;
}

View File

@@ -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<typename Type, typename Parameters>
std::shared_ptr<Type> ResourceLoader<Type, Parameters>::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);

View File

@@ -50,11 +50,11 @@ namespace Nz
std::shared_ptr<Type> 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<Type>();
}
NazaraDebug("Loaded resource from file " + PathToString(absolutePath));
NazaraDebug("loaded resource from file {0}", absolutePath);
it = m_resources.insert(std::make_pair(absolutePath, resource)).first;
}

View File

@@ -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;
}

View File

@@ -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 <NazaraUtils/Prerequisites.hpp>
#include <Nazara/Core/Config.hpp>
#include <NazaraUtils/Algorithm.hpp>
#include <filesystem>
#include <string>
namespace Nz
{
template<typename... Args> std::string Format(std::string_view str, Args&&... args);
template<typename T> decltype(auto) ToString(T&& value);
template<typename T>
struct ToStringFormatter
{
static_assert(AlwaysFalse<T>(), "ToStringFormatter is not implemented for this type");
};
template<>
struct NAZARA_CORE_API ToStringFormatter<std::filesystem::path>
{
static std::string Format(const std::filesystem::path& path);
};
template<>
struct ToStringFormatter<std::string>
{
static const std::string& Format(const std::string& value);
static std::string Format(std::string&& value);
};
template<>
struct ToStringFormatter<std::string_view>
{
static std::string Format(std::string_view value);
};
template<>
struct ToStringFormatter<const char*>
{
static std::string_view Format(const char* value);
template<std::size_t N> static std::string_view Format(const char(&str)[N]);
};
// Specializations declared in .inl
#define NAZARA_TO_STRING_INLINE_SPEC(Type) \
template<> \
struct ToStringFormatter<Type> \
{ \
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<Type> \
{ \
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 <Nazara/Core/ToString.inl>
#endif // NAZARA_CORE_TOSTRING_HPP

View File

@@ -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 <fmt/format.h>
#include <fmt/std.h>
#endif
#include <Nazara/Core/Debug.hpp>
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<typename ...Args>
std::string Format(std::string_view str, Args&&... args)
{
#ifdef NAZARA_BUILD
return fmt::format(str, std::forward<Args>(args)...);
#else
return Detail::FormatFallback(str, ToString(args)...);
#endif
}
template<typename T>
decltype(auto) ToString(T&& value)
{
return ToStringFormatter<std::decay_t<T>>::Format(std::forward<T>(value));
}
inline const std::string& ToStringFormatter<std::string>::Format(const std::string& value)
{
return value;
}
inline std::string ToStringFormatter<std::string>::Format(std::string&& value)
{
return value;
}
inline std::string ToStringFormatter<std::string_view>::Format(std::string_view value)
{
return std::string(value);
}
inline std::string_view ToStringFormatter<const char*>::Format(const char* value)
{
return std::string_view(value);
}
template<std::size_t N>
inline std::string_view ToStringFormatter<const char*>::Format(const char(&str)[N])
{
return std::string_view(str, N);
}
#define NAZARA_TO_STRING_STD_SPEC(Type) \
inline std::string ToStringFormatter<Type>::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 <Nazara/Core/DebugOff.hpp>

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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();
}

View File

@@ -7,12 +7,12 @@
#ifndef NAZARA_MATH_BOX_HPP
#define NAZARA_MATH_BOX_HPP
#include <NazaraUtils/EnumArray.hpp>
#include <Nazara/Math/Enums.hpp>
#include <Nazara/Math/Matrix4.hpp>
#include <Nazara/Math/Rect.hpp>
#include <Nazara/Math/Sphere.hpp>
#include <Nazara/Math/Vector3.hpp>
#include <NazaraUtils/EnumArray.hpp>
#include <string>
namespace Nz

View File

@@ -305,7 +305,7 @@ namespace Nz
return Vector3<T>(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<T>();
}

View File

@@ -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;
}

View File

@@ -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<typename T>
constexpr Plane<T> Plane<T>::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<T>::Lerp(from.normal, to.normal, interpolation);

View File

@@ -603,14 +603,6 @@ namespace Nz
template<typename T>
constexpr Quaternion<T> Quaternion<T>::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<typename T>
Quaternion<T> Quaternion<T>::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);

View File

@@ -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;
}

View File

@@ -7,9 +7,9 @@
#ifndef NAZARA_MATH_RECT_HPP
#define NAZARA_MATH_RECT_HPP
#include <NazaraUtils/EnumArray.hpp>
#include <Nazara/Math/Enums.hpp>
#include <Nazara/Math/Vector2.hpp>
#include <NazaraUtils/EnumArray.hpp>
#include <string>
namespace Nz

View File

@@ -246,7 +246,7 @@ namespace Nz
return Vector2<T>(x + width, y);
}
NazaraError("Corner not handled (0x" + NumberToString(UnderlyingCast(corner), 16) + ')');
NazaraError("Corner not handled ({0:#x})", UnderlyingCast(corner));
return Vector2<T>();
}

View File

@@ -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<typename T>
constexpr Sphere<T> Sphere<T>::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);

View File

@@ -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 {};
}
}

View File

@@ -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);
}

View File

@@ -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)

View File

@@ -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)

View File

@@ -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();
}

View File

@@ -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<const UInt8*>(start), reinterpret_cast<const UInt8*>(end), reinterpret_cast<UInt8*>(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;
}

View File

@@ -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 {};
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}
}