From c511ae90162f506f34ca0b98732577dc688ebcca Mon Sep 17 00:00:00 2001 From: Patrick Date: Sun, 27 Sep 2026 10:57:03 +0200 Subject: initial state --- src/main.zig | 50 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 11 deletions(-) (limited to 'src/main.zig') diff --git a/src/main.zig b/src/main.zig index 4c6d98a..9f68540 100644 --- a/src/main.zig +++ b/src/main.zig @@ -9,8 +9,9 @@ const slog = sokol.log; const sg = sokol.gfx; const sapp = sokol.app; const sglue = sokol.glue; -const imgui = sokol.imgui; -const appimgui = sokol.appimgui; +const simgui = sokol.imgui; +const sappimgui = sokol.appimgui; +const ig = @import("cimgui_docking"); const vec3 = @import("math.zig").Vec3; const mat4 = @import("math.zig").Mat4; const shd = @import("shaders/main.glsl.zig"); @@ -20,6 +21,8 @@ const state = struct { var pass_action: sg.PassAction = .{}; var pip: sg.Pipeline = .{}; var bind: sg.Bindings = .{}; + var vs: shd.VsParams = .{.position = .{0,0}}; + var fs: shd.FsParams = .{.color = .{1,0,0,1}}; }; }; @@ -29,16 +32,21 @@ export fn init() void { .logger = .{ .func = slog.func }, }); - imgui.setup(.{}); - appimgui.setup(); + simgui.setup(.{}); + sappimgui.setup(); + ig.igGetIO().*.ConfigFlags |= ig.ImGuiConfigFlags_DockingEnable; // default pass action: clear to blue-ish state.display.pass_action.colors[0] = .{ .load_action = .CLEAR, - .clear_value = .{ .r = 0.25, .g = 0.45, .b = 0.65, .a = 1.0 }, + .clear_value = .{ .r = 1, .g = 0, .b = 0, .a = 1.0 }, }; - const vbuf = sg.makeBuffer(.{}); + const vbuf = sg.makeBuffer(.{.data = sg.asRange(&[6]f32 { + -1.0, -1.0, + -1.0, 3.0, + 3.0, -1.0, + })}); state.display.bind.vertex_buffers[0] = vbuf; // shader and pipeline object for the default render pass @@ -46,10 +54,9 @@ export fn init() void { .shader = sg.makeShader(shd.offscreenShaderDesc(sg.queryBackend())), .layout = init: { var l = sg.VertexLayoutState{}; - l.attrs[shd.ATTR_offscreen_position] = .{}; + l.attrs[shd.ATTR_offscreen_vpos] = .{ .format = .FLOAT2 }; break :init l; }, - .index_type = .UINT16, .cull_mode = .BACK, .depth = .{ .compare = .LESS_EQUAL, @@ -59,25 +66,46 @@ export fn init() void { } export fn event(ev: [*c]const sapp.Event) void { - appimgui.trackEvent(ev.*); + sappimgui.trackEvent(ev.*); + // forward input events to sokol-imgui + _ = simgui.handleEvent(ev.*); } export fn frame() void { + // call simgui.newFrame() before any ImGui calls + simgui.newFrame(.{ + .width = sapp.width(), + .height = sapp.height(), + .delta_time = sapp.frameDuration(), + .dpi_scale = sapp.dpiScale(), + }); + sappimgui.trackFrame(); + // const dt: f32 = @floatCast(sapp.frameDuration() * 60); // const aspect = sapp.widthf() / sapp.heightf(); + + if (ig.igBegin("abc", null, 0)) + { + _ = ig.igDragFloat2("position", &state.display.vs.position); + _ = ig.igColorEdit4("color", &state.display.fs.color, 0); + ig.igEnd(); + } sg.beginPass(.{ .action = state.display.pass_action, .swapchain = sglue.swapchain() }); sg.applyPipeline(state.display.pip); sg.applyBindings(state.display.bind); + sg.applyUniforms(shd.UB_vs_params, sg.asRange(&state.display.vs)); + sg.applyUniforms(shd.UB_fs_params, sg.asRange(&state.display.fs)); sg.draw(0, 3, 1); + simgui.render(); sg.endPass(); sg.commit(); } export fn cleanup() void { - appimgui.shutdown(); - imgui.shutdown(); + sappimgui.shutdown(); + simgui.shutdown(); sg.shutdown(); } -- cgit v1.2.3