summaryrefslogtreecommitdiff
path: root/common/LoggerImpl.h
diff options
context:
space:
mode:
authorJason Maskell <[email protected]>2016-05-31 11:24:52 +0200
committerJason Maskell <[email protected]>2016-05-31 11:24:52 +0200
commit999fd20ca96b8d44d3ce418f118fb3b846038978 (patch)
treefc86969d4eb006f592560e7bd425b9a2db865be2 /common/LoggerImpl.h
parentAdded path to opengl media search path. Removed commented out code left over ... (diff)
downloadwaveworks_archive-999fd20ca96b8d44d3ce418f118fb3b846038978.tar.xz
waveworks_archive-999fd20ca96b8d44d3ce418f118fb3b846038978.zip
Added support for RFC 104, the logging interface: https://docs.google.com/document/d/102b8k5pKYj9e-tMmG53aT5izur-qfUSPX1gBro4gN0Q/edit
Added a dumb implementation of the logger in the D3D11 sample. Added a method to the WaveWorks API to allow the user to set (override) the internal logger with their own supplied nv::ILogger derived object.
Diffstat (limited to 'common/LoggerImpl.h')
-rw-r--r--common/LoggerImpl.h67
1 files changed, 67 insertions, 0 deletions
diff --git a/common/LoggerImpl.h b/common/LoggerImpl.h
new file mode 100644
index 0000000..a07cead
--- /dev/null
+++ b/common/LoggerImpl.h
@@ -0,0 +1,67 @@
+#pragma once
+#include "Logger.h"
+#include <cstdarg>
+#include <cstdio>
+
+class LoggerWWSamples : public nv::ILogger
+{
+public:
+ LoggerWWSamples();
+ LoggerWWSamples(nv::LogSeverity loggingLevel);
+ virtual ~LoggerWWSamples() = default;
+
+ virtual void log(const char* text, nv::LogSeverity severity, const char* filename, int linenumber) override;
+ virtual void log(const wchar_t* text, nv::LogSeverity severity, const wchar_t* filename, int linenumber) override;
+
+ nv::LogSeverity getLoggingLevel();
+ void setLoggingLevel(nv::LogSeverity newLevel);
+
+private:
+ nv::LogSeverity LoggingLevel;
+};
+
+extern LoggerWWSamples* g_Logger;
+
+namespace wwsamples
+{
+ inline void log(nv::LogSeverity severity, const char* filename, int linenumber, const char* format, ...)
+ {
+ if (g_Logger == nullptr)
+ {
+ g_Logger = new LoggerWWSamples();
+ }
+
+ if (g_Logger->getLoggingLevel() > severity)
+ return;
+
+ char buffer[1024];
+
+ va_list args;
+ va_start(args, format);
+#if NV_GCC_FAMILY
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wformat-nonliteral"
+#endif
+ vsnprintf_s(buffer, sizeof(buffer), format, args);
+#if NV_GCC_FAMILY
+#pragma GCC diagnostic pop
+#endif
+ va_end(args);
+
+ g_Logger->log(buffer, severity, filename, linenumber);
+ }
+}
+
+
+
+#ifndef NV_LOG
+/// <param name="__VA_ARGS__">format, ...</param>
+#define NV_LOG(...) wwsamples::log(nv::LogSeverity::kInfo, __FILE__, __LINE__, __VA_ARGS__)
+/// <param name="__VA_ARGS__">format, ...</param>
+#define NV_WARN(...) wwsamples::log(nv::LogSeverity::kWarning, __FILE__, __LINE__, __VA_ARGS__)
+/// <param name="__VA_ARGS__">format, ...</param>
+#define NV_ERROR(...) wwsamples::log(nv::LogSeverity::kError, __FILE__, __LINE__, __VA_ARGS__)
+/// <param name="__VA_ARGS__">format, ...</param>
+#define NV_FATAL(...) wwsamples::log(nv::LogSeverity::kFatal, __FILE__, __LINE__, __VA_ARGS__)
+
+#endif \ No newline at end of file