Squashed 'vendor/zglfw/' content from commit f04fdbf

git-subtree-dir: vendor/zglfw
git-subtree-split: f04fdbfc5b6d8c9a12025013992ac1d48653931e
This commit is contained in:
2026-10-11 23:52:16 +02:00
commit dc11a13009
94 changed files with 58138 additions and 0 deletions

87
README.md Normal file
View File

@@ -0,0 +1,87 @@
# [zglfw](https://github.com/zig-gamedev/zglfw)
Zig build package and bindings for [GLFW 3.4](https://github.com/glfw/glfw/releases/tag/3.4)
## Getting started
Example `build.zig`:
```zig
const std = @import("std");
pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
const exe = b.addExecutable(.{ ... });
const zglfw = b.dependency("zglfw", .{
.target = target,
.optimize = optimize,
});
exe.root_module.addImport("zglfw", zglfw.module("root"));
if (target.result.os.tag != .emscripten) {
exe.root_module.linkLibrary(zglfw.artifact("glfw"));
}
b.installArtifact(exe);
}
```
Now in your code you may import and use `zglfw`:
```zig
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, 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, null);
defer window.destroy();
// setup your graphics context here
while (!window.shouldClose()) {
glfw.pollEvents();
// render your things here
window.swapBuffers();
}
}
```
See [zig-gamedev samples](https://github.com/zig-gamedev/zig-gamedev/tree/main/samples) for more complete usage examples.
## Usage with Vulkan
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`](https://github.com/Snektron/vulkan-zig):
```zig
const vulkan_headers = b.dependency("vulkan_headers", .{});
const vulkan = b.dependency("vulkan", .{
.registry = vulkan_headers.path("registry/vk.xml"),
}).module("vulkan-zig");
exe.root_module.addImport("vulkan", vulkan);
const zglfw = b.dependency("zglfw", .{
.target = target,
.optimize = optimize,
.import_vulkan = true,
});
const zglfw_mod = zglfw.module("root");
zglfw_mod.addImport("vulkan", vulkan);
exe.root_module.addImport("zglfw", zglfw_mod);
if (target.result.os.tag != .emscripten) {
exe.root_module.linkLibrary(zglfw.artifact("glfw"));
}
```