Skip to content

flying-swallow/zwindows

 
 

Repository files navigation

Windows development SDK for Zig game developers.

  • Lightweight partial bindings for:
    • Win32 API (extends std.os.windows) + COM
    • Direct3D 12 (+ SDK debug layers)
    • Direct3D 11 (+ SDK debug layers, D3D11-on-12)
    • Direct3D common + D3DCompiler
    • DXGI
    • DirectML
    • Direct2D + DirectWrite
    • Windows Imaging Component (WIC)
    • XAudio2 (+ XAudio2fx, XAPO)
    • WASAPI + Media Foundation
    • XInput

Using the Zig package

Example build.zig

pub fn build(b: *std.Build) void {

    ...

    const zwindows = b.dependency("zwindows", .{});

    // Import the Windows API bindings
    exe.root_module.addImport("zwindows", zwindows.module("zwindows"));
}

Bindings Usage Example

const windows = @import("zwindows");
const dwrite = windows.dwrite;
const dxgi = windows.dxgi;
const d3d12 = windows.d3d12;
const d3d12d = windows.d3d12d;
const dml = windows.directml;
// etc

pub fn main() !void {
    ...
    const winclass = windows.WNDCLASSEXA{
        .style = 0,
        .lpfnWndProc = processWindowMessage,
        .cbClsExtra = 0,
        .cbWndExtra = 0,
        .hInstance = @as(windows.HINSTANCE, @ptrCast(windows.GetModuleHandleA(null))),
        .hIcon = null,
        .hCursor = windows.LoadCursorA(null, @as(windows.LPCSTR, @ptrFromInt(32512))),
        .hbrBackground = null,
        .lpszMenuName = null,
        .lpszClassName = name,
        .hIconSm = null,
    };
    _ = windows.RegisterClassExA(&winclass);
}

Updating the bindings

Most of src/windows/** is generated from Microsoft's .winmd metadata (the same source windows-rs uses), via the generator in bindgen/. foundation.zig and strings.zig are hand-written and untouched by regeneration.

Generated modules, re-exported from zwindows:

Import API Source (src/windows/…)
windows.d3d12, windows.d3d12d Direct3D 12 (+ debug layers) graphics/direct3d12/{d3d12,d3d12sdklayers}.zig
windows.d3d11, windows.d3d11d, windows.d3d11on12 Direct3D 11 (+ debug, 11-on-12) graphics/direct3d11/{d3d11,d3d11sdklayers,d3d11on12}.zig
windows.d3d, windows.d3dcompiler Direct3D common, compiler graphics/direct3d/{d3dcommon,d3dcompiler}.zig
windows.dxgi DXGI graphics/dxgi/dxgi.zig
windows.d2d1, windows.dwrite Direct2D, DirectWrite graphics/{direct2d/d2d1,directwrite/dwrite}.zig
windows.directml DirectML graphics/directml/directml.zig
windows.wic Windows Imaging Component graphics/imaging/wincodec.zig
windows.xaudio2, windows.xaudio2fx, windows.xapo XAudio2 family media/audio/{xaudio2,xaudio2fx,xapo}.zig
windows.wasapi WASAPI media/audio/wasapi.zig
windows.mf Media Foundation media/mediafoundation/mf.zig
windows.xinput XInput ui/input/xinput.zig
windows.com COM system/com.zig

Requires a Rust toolchain. To pull in newer metadata and regenerate:

git submodule update --remote windows-rs
./update.sh

Then review the diff (git diff -- src/windows) before committing. This is a manual, maintainer-invoked step — zig build/zig build test never require Rust.

About

Windows development SDK for Zig game developers.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Zig 97.5%
  • Rust 2.5%