diff --git a/odin/sdl-opengl-rendering/flake.nix b/odin/sdl-opengl-rendering/flake.nix index 4650e01..e5eaa3a 100644 --- a/odin/sdl-opengl-rendering/flake.nix +++ b/odin/sdl-opengl-rendering/flake.nix @@ -68,14 +68,14 @@ ]; buildInputs = [ - pkgs.libGL - pkgs.libxkbcommon - - pkgs.xorg.libXi - pkgs.xorg.libX11 - pkgs.xorg.libXrandr - pkgs.xorg.libXinerama - pkgs.xorg.libXcursor + # pkgs.libGL + # pkgs.libxkbcommon + # pkgs.xorg.libXi + # pkgs.xorg.libX11 + # pkgs.xorg.libXrandr + # pkgs.xorg.libXinerama + # pkgs.xorg.libXcursor + # pkgs.wayland pkgs.sdl3 ]; diff --git a/odin/sdl-opengl-rendering/src/main.odin b/odin/sdl-opengl-rendering/src/main.odin index 3b4a6f6..015f77b 100644 --- a/odin/sdl-opengl-rendering/src/main.odin +++ b/odin/sdl-opengl-rendering/src/main.odin @@ -1,6 +1,8 @@ package visuals +import "base:runtime" import "core:c" +import "core:fmt" import "core:log" import "vendor:OpenGL" import "vendor:sdl3" @@ -19,13 +21,64 @@ init :: proc() -> (state: State, ok: bool) { GL_MAJOR :: 3 GL_MINOR :: 3 + // {{{ Configure logging + @(static) g_ctx: runtime.Context + g_ctx = context + + sdl3.SetLogPriorities(.VERBOSE) + sdl3.SetLogOutputFunction( + proc "c" ( + userdata: rawptr, + category: sdl3.LogCategory, + priority: sdl3.LogPriority, + message: cstring, + ) { + context = g_ctx + + level: log.Level + switch priority { + case .TRACE, .DEBUG, .VERBOSE: + level = .Debug + case .INFO: + level = .Info + case .WARN: + level = .Warning + case .ERROR: + level = .Error + case .CRITICAL: + level = .Fatal + case .INVALID: + fallthrough + case: + log.panicf("Unexpected log level %v", priority) + } + + options: runtime.Logger_Options = + context.logger.options - {.Short_File_Path, .Long_File_Path, .Procedure, .Line} + + context.logger.procedure( + context.logger.data, + level, + fmt.tprintf("[SDL/%v]: %v", category, message), + options, + ) + }, + nil, + ) + // }}} + sdl3.Init(sdl3.InitFlags{.VIDEO}) or_return sdl3.GL_SetAttribute(.CONTEXT_MAJOR_VERSION, GL_MAJOR) or_return sdl3.GL_SetAttribute(.CONTEXT_MINOR_VERSION, GL_MINOR) or_return sdl3.GL_SetAttribute(.CONTEXT_PROFILE_MASK, c.int(sdl3.GL_CONTEXT_PROFILE_CORE)) or_return sdl3.GL_SetSwapInterval(1) // vsync - state.window = sdl3.CreateWindow("SDL visual experiment", 640, 480, {.FULLSCREEN, .OPENGL}) + state.window = sdl3.CreateWindow( + "SDL visual experiment", + 640, + 480, + {.FULLSCREEN, .OPENGL, .RESIZABLE}, + ) (state.window != nil) or_return sdl3.StartTextInput(state.window) or_return @@ -53,7 +106,6 @@ init :: proc() -> (state: State, ok: bool) { // IBO data index_data := [?]u32{0, 1, 2, 3} - OpenGL.GenVertexArrays(1, &state.vao) OpenGL.BindVertexArray(state.vao) @@ -111,7 +163,18 @@ close :: proc(state: State) { } main :: proc() { - context.logger = log.create_console_logger() + log.Level_Headers = { + 0 ..< 10 = "[DEBUG] ", + 10 ..< 20 = "[INFO ] ", + 20 ..< 30 = "[WARN ] ", + 30 ..< 40 = "[ERROR] ", + 40 ..< 50 = "[FATAL] ", + } + + logger := log.create_console_logger() + logger.options -= {.Date, .Time} + context.logger = logger + state, ok := init() log.assertf(ok, "Got SDL error: %v", sdl3.GetError()) defer close(state)