Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Zig + ImGui

用zig直接写GUI项目的模板项目

基于 zguiZig 0.17 ImGui 示例项目,使用 GLFW + OpenGL 3 渲染。

依赖

项目通过 vendor/ 目录内置了已适配最新 Zig 0.17.0-dev.1811+6716bf52e 的依赖版本:

  • zgui — Dear ImGui 的 Zig 绑定
  • zglfw — GLFW 窗口
  • zopengl — OpenGL 加载器

构建与运行

zig build run

Esc 退出窗口。窗口内包含自定义面板和 ImGui 官方 Demo 窗口。

在你的项目中使用 ImGui

build.zig 中链接依赖(OpenGL 后端示例):

const zglfw = b.dependency("zglfw", .{ .target = target, .optimize = optimize });
exe.root_module.addImport("zglfw", zglfw.module("root"));
exe.root_module.linkLibrary(zglfw.artifact("glfw"));

const zopengl = b.dependency("zopengl", .{ .target = target });
exe.root_module.addImport("zopengl", zopengl.module("root"));

const zgui = b.dependency("zgui", .{
    .target = target,
    .optimize = optimize,
    .backend = .glfw_opengl3,
});
exe.root_module.addImport("zgui", zgui.module("root"));
exe.root_module.linkLibrary(zgui.artifact("imgui"));

代码中典型用法:

const zglfw = @import("zglfw");
const zopengl = @import("zopengl");
const zgui = @import("zgui");

// 创建 OpenGL 窗口后
try zopengl.loadCoreProfile(zglfw.getProcAddress, 4, 0);

zgui.init(allocator);
defer zgui.deinit();
zgui.backend.init(window);
defer zgui.backend.deinit();

// 每帧
zgui.backend.newFrame(fb_width, fb_height);
if (zgui.begin("Window", .{})) {
    if (zgui.button("Button", .{})) { /* ... */ }
}
zgui.end();
zgui.backend.draw();
window.swapBuffers();

更多 API 见 zgui README

其他后端

zgui 还支持 WebGPU、Vulkan、DirectX 12 等后端。WebGPU 方案需额外依赖 zgpu,设置 .backend = .glfw_wgpu 即可。

说明

Zig 0.17 目前与上游 zig-gamedev 包存在 API 差异,本项目在 vendor/ 中做了必要适配。待上游正式支持 0.17 后,可改回 build.zig.zon 的 URL 依赖方式。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages