Zig build package and bindings for GLFW 3.4
Example build.zig
:
pub fn build(b: *std.Build) void {
const exe = b.addExecutable(.{ ... });
const zglfw = b.dependency("zglfw", .{});
exe.root_module.addImport("zglfw", zglfw.module("root"));
if (target.result.os.tag != .emscripten) {
exe.linkLibrary(zglfw.artifact("glfw"));
}
}
Now in your code you may import and use zglfw
:
const glfw = @import("zglfw");
pub fn main() !void {
try glfw.init();
defer glfw.terminate();
const window = try glfw.createWindow(600, 600, "zig-gamedev: minimal_glfw_gl", null);
defer glfw.destroyWindow(window);
// or, using the equivalent, encapsulated, "objecty" API:
const window = try glfw.Window.create(600, 600, "zig-gamedev: minimal_glfw_gl", null);
defer window.destroy();
// setup your graphics context here
while (!window.shouldClose()) {
glfw.pollEvents();
// render your things here
window.swapBuffers();
}
}
See zig-gamedev samples for more complete usage examples.
To match types from zglfw
functions and Vulkan library import_vulkan
option may be used. When using this option vulkan
import must be provided to the root module.
Example build.zig
with vulkan-zig
:
const vulkan_headers = b.dependency("vulkan_headers");
const vulkan = b.dependency("vulkan_zig", .{
.registry = vulkan_headers.path("registry/vk.xml"),
}).module("vulkan-zig");
const zglfw = b.dependency("zglfw", .{ .import_vulkan = true });
const zglfw_mod = zglfw.module("root");
zglfw_mod.addImport("vulkan", vulkan);
const exe = b.addExecutable(.{
.name = "vk_setup",
.root_module = b.createModule(.{
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
.imports = &.{
.{ .name = "zglfw", .module = zglfw_mod },
.{ .name = "vulkan", .module = vulkan },
},
}),
});
exe.root_module.linkLibrary(zglfw.artifact("glfw"));