Skip to content

Commit fd6b009

Browse files
committed
add minimal_zgpu_glfw_gl sample
1 parent a42bde8 commit fd6b009

File tree

18 files changed

+151
-15
lines changed

18 files changed

+151
-15
lines changed

build.zig

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,12 @@ fn packagesCrossPlatform(b: *std.Build, options: Options) void {
9090
znoise_pkg = znoise.package(b, target, optimize, .{});
9191
zstbi_pkg = zstbi.package(b, target, optimize, .{});
9292
zbullet_pkg = zbullet.package(b, target, optimize, .{});
93-
zgui_pkg = zgui.package(b, target, optimize, .{
93+
zgui_glfw_wgpu_pkg = zgui.package(b, target, optimize, .{
9494
.options = .{ .backend = .glfw_wgpu },
9595
});
96+
zgui_glfw_gl_pkg = zgui.package(b, target, optimize, .{
97+
.options = .{ .backend = .glfw_opengl3 },
98+
});
9699
zgpu_pkg = zgpu.package(b, target, optimize, .{
97100
.options = .{ .uniforms_buffer_size = 4 * 1024 * 1024 },
98101
.deps = .{ .zpool = zpool_pkg.zpool, .zglfw = zglfw_pkg.zglfw },
@@ -162,6 +165,7 @@ fn samplesCrossPlatform(b: *std.Build, options: Options) void {
162165
const audio_experiments_wgpu = @import("samples/audio_experiments_wgpu/build.zig");
163166
const gui_test_wgpu = @import("samples/gui_test_wgpu/build.zig");
164167
const minimal_zgpu_zgui = @import("samples/minimal_zgpu_zgui/build.zig");
168+
const minimal_zgui_glfw_gl = @import("samples/minimal_zgui_glfw_gl/build.zig");
165169
const instanced_pills_wgpu = @import("samples/instanced_pills_wgpu/build.zig");
166170
const layers_wgpu = @import("samples/layers_wgpu/build.zig");
167171
const gamepad_wgpu = @import("samples/gamepad_wgpu/build.zig");
@@ -174,6 +178,7 @@ fn samplesCrossPlatform(b: *std.Build, options: Options) void {
174178
install(b, textured_quad_wgpu.build(b, options), "textured_quad_wgpu");
175179
install(b, gui_test_wgpu.build(b, options), "gui_test_wgpu");
176180
install(b, minimal_zgpu_zgui.build(b, options), "minimal_zgpu_zgui");
181+
install(b, minimal_zgui_glfw_gl.build(b, options), "minimal_zgui_glfw_gl");
177182
install(b, physically_based_rendering_wgpu.build(b, options), "physically_based_rendering_wgpu");
178183
install(b, instanced_pills_wgpu.build(b, options), "instanced_pills_wgpu");
179184
install(b, gamepad_wgpu.build(b, options), "gamepad_wgpu");
@@ -249,7 +254,8 @@ pub var zmesh_pkg: zmesh.Package = undefined;
249254
pub var zglfw_pkg: zglfw.Package = undefined;
250255
pub var zstbi_pkg: zstbi.Package = undefined;
251256
pub var zbullet_pkg: zbullet.Package = undefined;
252-
pub var zgui_pkg: zgui.Package = undefined;
257+
pub var zgui_glfw_wgpu_pkg: zgui.Package = undefined;
258+
pub var zgui_glfw_gl_pkg: zgui.Package = undefined;
253259
pub var zgpu_pkg: zgpu.Package = undefined;
254260
pub var ztracy_pkg: ztracy.Package = undefined;
255261
pub var zphysics_pkg: zphysics.Package = undefined;

samples/audio_experiments_wgpu/build.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub fn build(b: *std.Build, options: Options) *std.Build.CompileStep {
1313
.optimize = options.optimize,
1414
});
1515

16-
const zgui_pkg = @import("../../build.zig").zgui_pkg;
16+
const zgui_pkg = @import("../../build.zig").zgui_glfw_wgpu_pkg;
1717
const zmath_pkg = @import("../../build.zig").zmath_pkg;
1818
const zgpu_pkg = @import("../../build.zig").zgpu_pkg;
1919
const zglfw_pkg = @import("../../build.zig").zglfw_pkg;

samples/bullet_physics_test_wgpu/build.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub fn build(b: *std.Build, options: Options) *std.Build.CompileStep {
1313
.optimize = options.optimize,
1414
});
1515

16-
const zgui_pkg = @import("../../build.zig").zgui_pkg;
16+
const zgui_pkg = @import("../../build.zig").zgui_glfw_wgpu_pkg;
1717
const zmath_pkg = @import("../../build.zig").zmath_pkg;
1818
const zgpu_pkg = @import("../../build.zig").zgpu_pkg;
1919
const zglfw_pkg = @import("../../build.zig").zglfw_pkg;

samples/gamepad_wgpu/build.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub fn build(b: *std.Build, options: Options) *std.Build.CompileStep {
1313
.optimize = options.optimize,
1414
});
1515

16-
const zgui_pkg = @import("../../build.zig").zgui_pkg;
16+
const zgui_pkg = @import("../../build.zig").zgui_glfw_wgpu_pkg;
1717
const zmath_pkg = @import("../../build.zig").zmath_pkg;
1818
const zgpu_pkg = @import("../../build.zig").zgpu_pkg;
1919
const zglfw_pkg = @import("../../build.zig").zglfw_pkg;

samples/gui_test_wgpu/build.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub fn build(b: *std.Build, options: Options) *std.Build.CompileStep {
1313
.optimize = options.optimize,
1414
});
1515

16-
const zgui_pkg = @import("../../build.zig").zgui_pkg;
16+
const zgui_pkg = @import("../../build.zig").zgui_glfw_wgpu_pkg;
1717
const zmath_pkg = @import("../../build.zig").zmath_pkg;
1818
const zgpu_pkg = @import("../../build.zig").zgpu_pkg;
1919
const zglfw_pkg = @import("../../build.zig").zglfw_pkg;

samples/instanced_pills_wgpu/build.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pub fn build(b: *std.Build, options: Options) *std.Build.CompileStep {
1414
.optimize = options.optimize,
1515
});
1616

17-
const zgui_pkg = @import("../../build.zig").zgui_pkg;
17+
const zgui_pkg = @import("../../build.zig").zgui_glfw_wgpu_pkg;
1818
const zmath_pkg = @import("../../build.zig").zmath_pkg;
1919
const zgpu_pkg = @import("../../build.zig").zgpu_pkg;
2020
const zglfw_pkg = @import("../../build.zig").zglfw_pkg;

samples/layers_wgpu/build.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub fn build(b: *std.Build, options: Options) *std.Build.CompileStep {
1313
.optimize = options.optimize,
1414
});
1515

16-
const zgui_pkg = @import("../../build.zig").zgui_pkg;
16+
const zgui_pkg = @import("../../build.zig").zgui_glfw_wgpu_pkg;
1717
const zmath_pkg = @import("../../build.zig").zmath_pkg;
1818
const zgpu_pkg = @import("../../build.zig").zgpu_pkg;
1919
const zglfw_pkg = @import("../../build.zig").zglfw_pkg;

samples/minimal_zgpu_zgui/build.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub fn build(b: *std.Build, options: Options) *std.Build.CompileStep {
1313
.optimize = options.optimize,
1414
});
1515

16-
const zgui_pkg = @import("../../build.zig").zgui_pkg;
16+
const zgui_pkg = @import("../../build.zig").zgui_glfw_wgpu_pkg;
1717
const zgpu_pkg = @import("../../build.zig").zgpu_pkg;
1818
const zglfw_pkg = @import("../../build.zig").zglfw_pkg;
1919

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## minimal zgui with glfw gl3 backend
2+
3+
This minimal sample has a button that prints a message to the console when pressed.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
const std = @import("std");
2+
3+
const Options = @import("../../build.zig").Options;
4+
5+
const demo_name = "minimal_zgui_glfw_gl";
6+
const content_dir = demo_name ++ "_content/";
7+
8+
pub fn build(b: *std.Build, options: Options) *std.Build.CompileStep {
9+
const exe = b.addExecutable(.{
10+
.name = demo_name,
11+
.root_source_file = .{ .path = thisDir() ++ "/src/" ++ demo_name ++ ".zig" },
12+
.target = options.target,
13+
.optimize = options.optimize,
14+
});
15+
16+
const zgui_pkg = @import("../../build.zig").zgui_glfw_gl_pkg;
17+
const zopengl_pkg = @import("../../build.zig").zopengl_pkg;
18+
const zglfw_pkg = @import("../../build.zig").zglfw_pkg;
19+
20+
zgui_pkg.link(exe);
21+
zopengl_pkg.link(exe);
22+
zglfw_pkg.link(exe);
23+
24+
const exe_options = b.addOptions();
25+
exe.addOptions("build_options", exe_options);
26+
exe_options.addOption([]const u8, "content_dir", content_dir);
27+
28+
const install_content_step = b.addInstallDirectory(.{
29+
.source_dir = .{ .path = thisDir() ++ "/" ++ content_dir },
30+
.install_dir = .{ .custom = "" },
31+
.install_subdir = "bin/" ++ content_dir,
32+
});
33+
exe.step.dependOn(&install_content_step.step);
34+
35+
return exe;
36+
}
37+
38+
inline fn thisDir() []const u8 {
39+
return comptime std.fs.path.dirname(@src().file) orelse ".";
40+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
version https://git-lfs.github.com/spec/v1
2+
oid sha256:8559132c89ad51d8a2ba5b171887a44a7ba93776e205f553573de228e64b45f8
3+
size 162588
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
const std = @import("std");
2+
3+
const zgui = @import("zgui");
4+
const glfw = @import("zglfw");
5+
const gl = @import("zopengl");
6+
7+
const content_dir = @import("build_options").content_dir;
8+
const window_title = "zig-gamedev: minimal zgpu glfw opengl3";
9+
10+
pub fn main() !void {
11+
try glfw.init();
12+
defer glfw.terminate();
13+
14+
// Change current working directory to where the executable is located.
15+
{
16+
var buffer: [1024]u8 = undefined;
17+
const path = std.fs.selfExeDirPath(buffer[0..]) catch ".";
18+
std.os.chdir(path) catch {};
19+
}
20+
21+
const gl_major = 4;
22+
const gl_minor = 0;
23+
glfw.windowHintTyped(.context_version_major, gl_major);
24+
glfw.windowHintTyped(.context_version_minor, gl_minor);
25+
glfw.windowHintTyped(.opengl_profile, .opengl_core_profile);
26+
glfw.windowHintTyped(.opengl_forward_compat, true);
27+
glfw.windowHintTyped(.client_api, .opengl_api);
28+
glfw.windowHintTyped(.doublebuffer, true);
29+
30+
const window = try glfw.Window.create(800, 500, window_title, null);
31+
defer window.destroy();
32+
window.setSizeLimits(400, 400, -1, -1);
33+
34+
glfw.makeContextCurrent(window);
35+
glfw.swapInterval(1);
36+
37+
try gl.loadCoreProfile(glfw.getProcAddress, gl_major, gl_minor);
38+
39+
var gpa_state = std.heap.GeneralPurposeAllocator(.{}){};
40+
defer _ = gpa_state.deinit();
41+
const gpa = gpa_state.allocator();
42+
43+
zgui.init(gpa);
44+
defer zgui.deinit();
45+
46+
const scale_factor = scale_factor: {
47+
const scale = window.getContentScale();
48+
break :scale_factor @max(scale[0], scale[1]);
49+
};
50+
_ = zgui.io.addFontFromFile(
51+
content_dir ++ "Roboto-Medium.ttf",
52+
std.math.floor(16.0 * scale_factor),
53+
);
54+
55+
zgui.getStyle().scaleAllSizes(scale_factor);
56+
57+
zgui.backend.init(window);
58+
defer zgui.backend.deinit();
59+
60+
while (!window.shouldClose() and window.getKey(.escape) != .press) {
61+
glfw.pollEvents();
62+
63+
gl.clearBufferfv(gl.COLOR, 0, &[_]f32{ 0, 0, 0, 1.0 });
64+
65+
const fb_size = window.getFramebufferSize();
66+
67+
zgui.backend.newFrame(@intCast(fb_size[0]), @intCast(fb_size[1]));
68+
69+
// Set the starting window position and size to custom values
70+
zgui.setNextWindowPos(.{ .x = 20.0, .y = 20.0, .cond = .first_use_ever });
71+
zgui.setNextWindowSize(.{ .w = -1.0, .h = -1.0, .cond = .first_use_ever });
72+
73+
if (zgui.begin("My window", .{})) {
74+
if (zgui.button("Press me!", .{ .w = 200.0 })) {
75+
std.debug.print("Button pressed\n", .{});
76+
}
77+
}
78+
zgui.end();
79+
80+
zgui.backend.draw();
81+
82+
window.swapBuffers();
83+
}
84+
}

samples/monolith/build.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub fn build(b: *std.Build, options: Options) *std.Build.CompileStep {
1111
.optimize = options.optimize,
1212
});
1313

14-
const zgui_pkg = @import("../../build.zig").zgui_pkg;
14+
const zgui_pkg = @import("../../build.zig").zgui_glfw_wgpu_pkg;
1515
const zmath_pkg = @import("../../build.zig").zmath_pkg;
1616
const zgpu_pkg = @import("../../build.zig").zgpu_pkg;
1717
const zglfw_pkg = @import("../../build.zig").zglfw_pkg;

samples/physically_based_rendering_wgpu/build.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub fn build(b: *std.Build, options: Options) *std.Build.CompileStep {
1111
.optimize = options.optimize,
1212
});
1313

14-
const zgui_pkg = @import("../../build.zig").zgui_pkg;
14+
const zgui_pkg = @import("../../build.zig").zgui_glfw_wgpu_pkg;
1515
const zmath_pkg = @import("../../build.zig").zmath_pkg;
1616
const zgpu_pkg = @import("../../build.zig").zgpu_pkg;
1717
const zglfw_pkg = @import("../../build.zig").zglfw_pkg;

samples/physics_test_wgpu/build.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub fn build(b: *std.Build, options: Options) *std.Build.CompileStep {
1111
.optimize = options.optimize,
1212
});
1313

14-
const zgui_pkg = @import("../../build.zig").zgui_pkg;
14+
const zgui_pkg = @import("../../build.zig").zgui_glfw_wgpu_pkg;
1515
const zmath_pkg = @import("../../build.zig").zmath_pkg;
1616
const zgpu_pkg = @import("../../build.zig").zgpu_pkg;
1717
const zglfw_pkg = @import("../../build.zig").zglfw_pkg;

samples/procedural_mesh_wgpu/build.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub fn build(b: *std.Build, options: Options) *std.Build.CompileStep {
1111
.optimize = options.optimize,
1212
});
1313

14-
const zgui_pkg = @import("../../build.zig").zgui_pkg;
14+
const zgui_pkg = @import("../../build.zig").zgui_glfw_wgpu_pkg;
1515
const zmath_pkg = @import("../../build.zig").zmath_pkg;
1616
const zgpu_pkg = @import("../../build.zig").zgpu_pkg;
1717
const zglfw_pkg = @import("../../build.zig").zglfw_pkg;

samples/textured_quad_wgpu/build.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub fn build(b: *std.Build, options: Options) *std.Build.CompileStep {
1111
.optimize = options.optimize,
1212
});
1313

14-
const zgui_pkg = @import("../../build.zig").zgui_pkg;
14+
const zgui_pkg = @import("../../build.zig").zgui_glfw_wgpu_pkg;
1515
const zmath_pkg = @import("../../build.zig").zmath_pkg;
1616
const zgpu_pkg = @import("../../build.zig").zgpu_pkg;
1717
const zglfw_pkg = @import("../../build.zig").zglfw_pkg;

samples/triangle_wgpu/build.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub fn build(b: *std.Build, options: Options) *std.Build.CompileStep {
1111
.optimize = options.optimize,
1212
});
1313

14-
const zgui_pkg = @import("../../build.zig").zgui_pkg;
14+
const zgui_pkg = @import("../../build.zig").zgui_glfw_wgpu_pkg;
1515
const zmath_pkg = @import("../../build.zig").zmath_pkg;
1616
const zgpu_pkg = @import("../../build.zig").zgpu_pkg;
1717
const zglfw_pkg = @import("../../build.zig").zglfw_pkg;

0 commit comments

Comments
 (0)