@@ -49,7 +49,7 @@ void AppendLogLine(LogLevel log_level, const char prefix_char, size_t written);
4949
5050} // namespace internal
5151
52- // Appends a line to the log with printf -style formatting.
52+ // Appends a line to the log with {fmt} -style formatting.
5353template <typename ... Args>
5454void AppendLogLineFormat (LogLevel log_level, const char prefix_char,
5555 const char * format, const Args&... args) {
@@ -119,6 +119,40 @@ void XELOGFS(const char* format, const Args&... args) {
119119 xe::logging::AppendLogLineFormat (xe::LogLevel::Info, ' F' , format, args...);
120120}
121121
122+ // Redirect SDL_Log* output (internal library stuff) to our log system.
123+ // Can't execute this code here without linking SDL2 into all projects.
124+ // Use this macro everywhere SDL_InitSubSystem() is called.
125+ #define XELOG_SDL_INIT () \
126+ { \
127+ SDL_LogSetOutputFunction ( \
128+ [](void * userdata, int category, SDL_LogPriority priority, \
129+ const char * message) { \
130+ const char * msg_fmt = " SDL: {}" ; \
131+ switch (priority) { \
132+ case SDL_LOG_PRIORITY_VERBOSE: \
133+ case SDL_LOG_PRIORITY_DEBUG: \
134+ XELOGD (msg_fmt, message); \
135+ break ; \
136+ case SDL_LOG_PRIORITY_INFO: \
137+ XELOGI (msg_fmt, message); \
138+ break ; \
139+ case SDL_LOG_PRIORITY_WARN: \
140+ XELOGW (msg_fmt, message); \
141+ break ; \
142+ case SDL_LOG_PRIORITY_ERROR: \
143+ case SDL_LOG_PRIORITY_CRITICAL: \
144+ XELOGE (msg_fmt, message); \
145+ break ; \
146+ default : \
147+ XELOGI (msg_fmt, message); \
148+ assert_always (" SDL: Unknown log priority" ); \
149+ break ; \
150+ } \
151+ }, \
152+ nullptr ); \
153+ SDL_LogSetAllPriority (SDL_LogPriority::SDL_LOG_PRIORITY_VERBOSE); \
154+ }
155+
122156#else
123157
124158#define XELOGDUMMY \
@@ -135,6 +169,8 @@ void XELOGFS(const char* format, const Args&... args) {
135169#define XELOGKERNEL (...) XELOGDUMMY
136170#define XELOGFS (...) XELOGDUMMY
137171
172+ #define XELOG_SDL_INIT () XELOGDUMMY
173+
138174#undef XELOGDUMMY
139175
140176#endif // ENABLE_LOGGING
0 commit comments