raylib/log

Code

main.odin ¶
58 linesSource

1package raylib_example_log
2
3import       "base:runtime"
4
5import       "core:log"
6import       "core:c"
7
8import rl    "vendor:raylib"
9import stbsp "vendor:stb/sprintf"
10
11SCREEN_WIDTH  :: 800
12SCREEN_HEIGHT :: 450
13
14g_ctx: runtime.Context
15
16main :: proc() {
17	context.logger = log.create_console_logger(.Debug)
18	g_ctx = context
19
20	rl.SetTraceLogLevel(.ALL)
21	rl.SetTraceLogCallback(proc "c" (rl_level: rl.TraceLogLevel, message: cstring, args: ^c.va_list) {
22		context = g_ctx
23
24		level: log.Level
25		switch rl_level {
26		case .TRACE, .DEBUG: level = .Debug
27		case .INFO:          level = .Info
28		case .WARNING:       level = .Warning
29		case .ERROR:         level = .Error
30		case .FATAL:         level = .Fatal
31		case .ALL, .NONE:    fallthrough
32		case:                log.panicf("unexpected log level %v", rl_level)
33		}
34
35		@static buf: [dynamic]byte
36		log_len: i32
37		for {
38			buf_len := i32(len(buf))
39			log_len = stbsp.vsnprintf(raw_data(buf), buf_len, message, args)
40			if log_len <= buf_len {
41				break
42			}
43
44			non_zero_resize(&buf, max(128, len(buf)*2))
45		}
46
47		context.logger.procedure(context.logger.data, level, string(buf[:log_len]), context.logger.options)
48	})
49
50	rl.InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "raylib log callback")
51	defer rl.CloseWindow()
52
53	for !rl.WindowShouldClose() {
54		rl.BeginDrawing()
55		rl.ClearBackground(rl.RAYWHITE)
56		rl.EndDrawing()
57	}
58}

Declarations Used 16