Go to the documentation of this file.
48 throw std::runtime_error(std::move(msg));
51 template <
bool bThrowException,
typename... ArgsType>
52 void LogError(
bool IsFatal,
const char* Function,
const char* FullFilePath,
int Line,
const ArgsType&... Args)
54 std::string FileName(FullFilePath);
56 auto LastSlashPos = FileName.find_last_of(
"/\\");
57 if (LastSlashPos != std::string::npos)
58 FileName.erase(0, LastSlashPos + 1);
67 std::cerr <<
"Diligent Engine: " << (IsFatal ?
"Fatal Error" :
"Error") <<
" in " << Function <<
"() (" << FileName <<
", " << Line <<
"): " << Msg <<
'\n';
69 ThrowIf<bThrowException>(std::move(Msg));
76 #define LOG_ERROR(...) \
79 Diligent::LogError<false>(false, __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__); \
83 #define LOG_FATAL_ERROR(...) \
86 Diligent::LogError<false>(true, __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__); \
89 #define LOG_ERROR_ONCE(...) \
92 static bool IsFirstTime = true; \
95 LOG_ERROR(##__VA_ARGS__); \
96 IsFirstTime = false; \
101 #define LOG_ERROR_AND_THROW(...) \
104 Diligent::LogError<true>(false, __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__); \
107 #define LOG_FATAL_ERROR_AND_THROW(...) \
110 Diligent::LogError<true>(true, __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__); \
114 #define LOG_DEBUG_MESSAGE(Severity, ...) \
117 auto _msg = Diligent::FormatString(__VA_ARGS__); \
118 if (Diligent::DebugMessageCallback != nullptr) Diligent::DebugMessageCallback(Severity, _msg.c_str(), nullptr, nullptr, 0); \
121 #define LOG_FATAL_ERROR_MESSAGE(...) LOG_DEBUG_MESSAGE(Diligent::DEBUG_MESSAGE_SEVERITY_FATAL_ERROR, ##__VA_ARGS__)
122 #define LOG_ERROR_MESSAGE(...) LOG_DEBUG_MESSAGE(Diligent::DEBUG_MESSAGE_SEVERITY_ERROR, ##__VA_ARGS__)
123 #define LOG_WARNING_MESSAGE(...) LOG_DEBUG_MESSAGE(Diligent::DEBUG_MESSAGE_SEVERITY_WARNING, ##__VA_ARGS__)
124 #define LOG_INFO_MESSAGE(...) LOG_DEBUG_MESSAGE(Diligent::DEBUG_MESSAGE_SEVERITY_INFO, ##__VA_ARGS__)
127 #define LOG_DEBUG_MESSAGE_ONCE(Severity, ...) \
130 static bool IsFirstTime = true; \
133 LOG_DEBUG_MESSAGE(Severity, ##__VA_ARGS__); \
134 IsFirstTime = false; \
138 #define LOG_FATAL_ERROR_MESSAGE_ONCE(...) LOG_DEBUG_MESSAGE_ONCE(Diligent::DEBUG_MESSAGE_SEVERITY_FATAL_ERROR, ##__VA_ARGS__)
139 #define LOG_ERROR_MESSAGE_ONCE(...) LOG_DEBUG_MESSAGE_ONCE(Diligent::DEBUG_MESSAGE_SEVERITY_ERROR, ##__VA_ARGS__)
140 #define LOG_WARNING_MESSAGE_ONCE(...) LOG_DEBUG_MESSAGE_ONCE(Diligent::DEBUG_MESSAGE_SEVERITY_WARNING, ##__VA_ARGS__)
141 #define LOG_INFO_MESSAGE_ONCE(...) LOG_DEBUG_MESSAGE_ONCE(Diligent::DEBUG_MESSAGE_SEVERITY_INFO, ##__VA_ARGS__)
144 #define CHECK(Expr, Severity, ...) \
149 LOG_DEBUG_MESSAGE(Severity, ##__VA_ARGS__); \
153 #define CHECK_FATAL_ERR(Expr, ...) CHECK(Expr, Diligent::DEBUG_MESSAGE_SEVERITY_FATAL_ERROR, ##__VA_ARGS__)
154 #define CHECK_ERR(Expr, ...) CHECK(Expr, Diligent::DEBUG_MESSAGE_SEVERITY_ERROR, ##__VA_ARGS__)
155 #define CHECK_WARN(Expr, ...) CHECK(Expr, Diligent::DEBUG_MESSAGE_SEVERITY_WARNING, ##__VA_ARGS__)
156 #define CHECK_INFO(Expr, ...) CHECK(Expr, Diligent::DEBUG_MESSAGE_SEVERITY_INFO, ##__VA_ARGS__)
158 #define CHECK_THROW(Expr, ...) \
163 LOG_ERROR_AND_THROW(##__VA_ARGS__); \
@ DEBUG_MESSAGE_SEVERITY_FATAL_ERROR
Fatal error - recovery is not possible.
Definition: DebugOutput.h:47
void LogError(bool IsFatal, const char *Function, const char *FullFilePath, int Line, const ArgsType &... Args)
Definition: Errors.hpp:52
DebugMessageCallbackType DebugMessageCallback
Definition: AndroidDebug.cpp:60
@ DEBUG_MESSAGE_SEVERITY_ERROR
Error, with potential recovery.
Definition: DebugOutput.h:44
void ThrowIf< true >(std::string &&msg)
Definition: Errors.hpp:46
void ThrowIf(std::string &&)
Definition: Errors.hpp:41
std::string FormatString(const RestArgsType &... Args)
Definition: FormatString.hpp:55
The library uses Direct3D-style math:
Definition: AdvancedMath.hpp:37