Skip to content
main
Switch branches/tags
Code

zig-gamedev project

This repository contains a collection of sample applications and cross-platform, standalone, composable libraries written in Zig programming language. Project is under active development, see Roadmap and Progress Reports for the details.

To get started on Windows/Linux/Mac try out physically based rendering (wgpu) sample:

(git with Git LFS extension and Zig 0.10.0-dev.2017 (master) or newer is required)

git clone https://github.com/michal-z/zig-gamedev.git
cd zig-gamedev
zig build physically_based_rendering_wgpu-run

Cross-platfrom (Win/Lin/Mac) libraries:

Windows libraries:

  • zwin32 - Zig bindings for Win32 API
  • zd3d12 - helper library for working with DirectX 12
  • zxaudio2 - helper library for working with XAudio2
  • zpix - support for GPU profiling with PIX
  • Interop with Direct2D and DirectWrite for high-quality vector graphics and text rendering (optional)

Project vision:

  • Works on Windows, Linux and MacOS
  • Has zero dependency except Zig compiler (master), git with Git LFS and curl - no Visual Studio, Build Tools, Windows SDK, gcc, dev packages, system headers/libs, cmake, ninja, etc. is needed
  • Building is as easy as running zig build (see: Building)
  • Libraries are written from scratch in Zig or provide Ziggified bindings to carefully selected C/C++ libraries
  • Uses native version of WebGPU API (mach/gpu) for cross-platfrom graphics and DirectX 12 for low-level graphics on Windows

I work on this project full-time and try to make a living from donations. If you like it, please consider supporting me. Thanks!

Cross-platfrom (Win/Lin/Mac) sample applications (native WebGPU)

Some of the sample applications are listed below. More can be found in samples directory.

  1. physically based rendering (wgpu): This sample implements physically-based rendering (PBR) and image-based lighting (IBL) to achive realistic looking rendering results.

    physically based rendering (wgpu)

    zig build physically_based_rendering_wgpu-run

  2. procedural mesh (wgpu): This sample shows how to efficiently draw several procedurally generated meshes.

    procedural mesh wgpu (wgpu)

    zig build procedural_mesh_wgpu-run

Windows sample applications (DirectX 12)

If you are new to DirectX 12 graphics programming I recommend starting with intro applications.

  1. rasterization: This sample application shows how GPU rasterizes triangles in slow motion.

    rasterization

    zig build rasterization-run

  2. simple raytracer: This sample implements basic hybrid renderer. It uses rasterization to resolve primary rays and raytracing (DXR) for shadow rays.

    simple raytracer

    zig build simple_raytracer-run

  3. virtual physics lab: This sample application demonstrates how to use full 3D physics engine in your Zig programs.

    virtual physics lab

    zig build bullet_physics_test-run

  4. mesh shader test: This sample shows how to use DirectX 12 Mesh Shader.

    mesh shader test

    zig build mesh_shader_test-run

Building sample applications

To build all sample applications (assuming zig is in the PATH and Git LFS is installed):

  1. git clone https://github.com/michal-z/zig-gamedev.git
  2. cd zig-gamedev
  3. zig build

Build artifacts will show up in zig-out/bin folder.

zig build <sample_name> will build sample application named <sample_name>.

zig build <sample_name>-run will build and run sample application named <sample_name>.

To list all available sample names run zig build --help and navigate to Steps section.

Build options

All sample applications support the following build options:

  • -Drelease-safe=[bool] - Optimizations on and safety on
  • -Drelease-fast=[bool] - Optimizations on and safety off
  • -Denable-tracy=[bool] - Tracy profiler zones enabled
  • -Ddawn-from-source=[bool] - Build Dawn (WebGPU implementation) from source

Addidtional options for Windows applications:

  • -Denable-dx-debug=[bool] - Direct3D 12, Direct2D, DXGI debug layers enabled
  • -Denable-dx-gpu-debug=[bool] - Direct3D 12 GPU-Based Validation enabled (requires -Denable-dx-debug=true)
  • -Denable-pix=[bool] - PIX markers and events enabled

GitHub Sponsors

Thanks to all people who sponsor zig-gamedev project! In particular, these fine folks sponsor zig-gamedev for $25/month or more: