diff options
| author | Jason Maskell <[email protected]> | 2016-05-31 11:24:52 +0200 |
|---|---|---|
| committer | Jason Maskell <[email protected]> | 2016-05-31 11:24:52 +0200 |
| commit | 999fd20ca96b8d44d3ce418f118fb3b846038978 (patch) | |
| tree | fc86969d4eb006f592560e7bd425b9a2db865be2 /src/InternalLogger.h | |
| parent | Added path to opengl media search path. Removed commented out code left over ... (diff) | |
| download | waveworks_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 'src/InternalLogger.h')
| -rw-r--r-- | src/InternalLogger.h | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/InternalLogger.h b/src/InternalLogger.h new file mode 100644 index 0000000..d10f263 --- /dev/null +++ b/src/InternalLogger.h @@ -0,0 +1,108 @@ +#pragma once + +#include "Logger.h" +#include <cstdarg> +#include <cstdio> +#include <wtypes.h> +#include <stdio.h> +#include <wchar.h> +#include <memory> + +class InternalLogger : public nv::ILogger +{ +public: + InternalLogger(); + InternalLogger(nv::LogSeverity loggingLevel); + virtual ~InternalLogger() = 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); + + static InternalLogger* GetInstance() + { + static InternalLogger Instance; + return &Instance; + } + +private: + nv::LogSeverity LoggingLevel; + +}; + +extern nv::ILogger* g_UserLogger; + +namespace WaveworksInternal +{ + inline void log(nv::LogSeverity severity, const wchar_t* filename, int linenumber, const wchar_t* format, ...) + { + wchar_t buffer[1024]; + + va_list args; + va_start(args, format); +#if NV_GCC_FAMILY +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif + _vsnwprintf_s(buffer, sizeof(buffer), format, args); +#if NV_GCC_FAMILY +#pragma GCC diagnostic pop +#endif + va_end(args); + + + // Only output to one logger at a time. May not be the desired behaviour. + if (g_UserLogger) + { + g_UserLogger->log(buffer, severity, filename, linenumber); + } + else + { + InternalLogger::GetInstance()->log(buffer, severity, filename, linenumber); + } + + } + + inline void log(nv::LogSeverity severity, const char* filename, int linenumber, const char* format, ...) + { + 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); + + // Only output to one logger at a time. May not be the desired behaviour. + if (g_UserLogger) + { + g_UserLogger->log(buffer, severity, filename, linenumber); + } + else + { + InternalLogger::GetInstance()->log(buffer, severity, filename, linenumber); + } + } +} + + + +#ifndef NV_LOG +/// <param name="__VA_ARGS__">format, ...</param> +#define NV_LOG(...) WaveworksInternal::log(nv::LogSeverity::kInfo, __DEF_FILE__, __LINE__, __VA_ARGS__) +/// <param name="__VA_ARGS__">format, ...</param> +#define NV_WARN(...) WaveworksInternal::log(nv::LogSeverity::kWarning, __DEF_FILE__, __LINE__, __VA_ARGS__) +/// <param name="__VA_ARGS__">format, ...</param> +#define NV_ERROR(...) WaveworksInternal::log(nv::LogSeverity::kError, __DEF_FILE__, __LINE__, __VA_ARGS__) +/// <param name="__VA_ARGS__">format, ...</param> +#define NV_FATAL(...) WaveworksInternal::log(nv::LogSeverity::kFatal, __DEF_FILE__, __LINE__, __VA_ARGS__) + +#endif
\ No newline at end of file |