lateralis/sokol/helpers/logger.odin
2025-02-03 18:15:56 +13:00

59 lines
1.4 KiB
Odin

package sokol_helpers
// Pass sokol logs into native odin logging system
import sapp "../app"
import sg "../gfx"
import "base:runtime"
import "core:log"
Logger :: struct {
func: proc "c" (
tag: cstring,
log_level: u32,
log_item: u32,
message: cstring,
line_nr: u32,
filename: cstring,
user_data: rawptr,
),
user_data: rawptr,
}
// context_ptr: a pointer to a context which persists during the lifetime of the program.
// Note: you can transmute() this into a logger for any specific sokol library.
logger :: proc "contextless" (context_ptr: ^runtime.Context) -> Logger {
return {func = logger_proc, user_data = cast(rawptr)context_ptr}
}
logger_proc :: proc "c" (
tag: cstring,
log_level: u32,
log_item: u32,
message: cstring,
line_nr: u32,
filename: cstring,
user_data: rawptr,
) {
context = (cast(^runtime.Context)user_data)^
loc := runtime.Source_Code_Location {
file_path = string(filename),
line = i32(line_nr),
}
level: log.Level
switch log_level {
case 0:
log.panicf("Sokol Panic: (%i) %s: %s", log_item, tag, message, location = loc)
case 1:
level = .Error
case 2:
level = .Warning
case:
level = .Info
}
log.logf(level, "(%i) %s: %s", log_item, tag, message, location = loc)
}