Skip to content

Instantly share code, notes, and snippets.

@laytan
Last active April 19, 2024 08:53
Show Gist options
  • Save laytan/e411288bc622eaf09832e752b31c9bc8 to your computer and use it in GitHub Desktop.
Save laytan/e411288bc622eaf09832e752b31c9bc8 to your computer and use it in GitHub Desktop.
Raylib logging callback to Odin logger
logger: log.Logger
rl_log_buf: []byte
rl_log :: proc "c" (logLevel: rl.TraceLogLevel, text: cstring, args: libc.va_list) {
context = runtime.default_context()
context.logger = logger
level: log.Level
switch logLevel {
case .TRACE, .DEBUG: level = .Debug
case .ALL, .NONE, .INFO: level = .Info
case .WARNING: level = .Warning
case .ERROR: level = .Error
case .FATAL: level = .Fatal
}
if level < logger.lowest_level {
return
}
if rl_log_buf == nil {
rl_log_buf = make([]byte, 1024)
}
defer mem.zero_slice(rl_log_buf)
n: int
for {
va := args
n = int(libc.vsnprintf(raw_data(rl_log_buf), len(rl_log_buf), text, &va))
if n < len(rl_log_buf) do break
log.infof("Resizing raylib log buffer from %m to %m", len(rl_log_buf), len(rl_log_buf)*2)
rl_log_buf, _ = mem.resize_bytes(rl_log_buf, len(rl_log_buf)*2)
}
formatted := string(rl_log_buf[:n])
log.log(level, formatted)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment