Skip to content

Commit 05a6267

Browse files
JoelLinngibbed
authored andcommitted
[SDL2] Redirect log messages into our system.
1 parent 11d79c6 commit 05a6267

File tree

4 files changed

+40
-2
lines changed

4 files changed

+40
-2
lines changed

src/xenia/apu/sdl/sdl_audio_driver.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ SDLAudioDriver::~SDLAudioDriver() {
3131
};
3232

3333
bool SDLAudioDriver::Initialize() {
34+
XELOG_SDL_INIT()
3435
SDL_version ver = {};
3536
SDL_GetVersion(&ver);
3637
if ((ver.major < 2) || (ver.major == 2 && ver.minor == 0 && ver.patch < 8)) {

src/xenia/base/logging.h

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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.
5353
template <typename... Args>
5454
void 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

src/xenia/base/premake5.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ project("xenia-base")
66
kind("StaticLib")
77
language("C++")
88
links({
9-
"fmt"
9+
"fmt",
1010
})
1111
defines({
1212
})

src/xenia/hid/sdl/sdl_input_driver.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ SDLInputDriver::~SDLInputDriver() {
5353
}
5454

5555
X_STATUS SDLInputDriver::Setup() {
56+
XELOG_SDL_INIT()
5657
if (!TestSDLVersion()) {
5758
return X_STATUS_UNSUCCESSFUL;
5859
}

0 commit comments

Comments
 (0)