Project requires Zig 0.10.0-dev.2412 (master) or newer to compile.
This repository contains a collection of sample applications and cross-platform, composable libraries written in Zig programming language. Currently, it provides a solution for: cross-platform graphics, multi-threaded physics, SIMD math, procedural content generation (basic), profiling and more.
The goal of the project is to build a toolbox of libraries for Zig game developers. A lot of effort is being put to make the whole package consistent and let the developer use only the components she needs. Project is being developed by contributors and by one full-time developer.
To get started on Windows/Linux/Mac try out physically based rendering (wgpu) sample:
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:
- zgpu - Cross-platform graphics layer built on top of native WebGPU API (Dawn)
- zmath - SIMD math library for game developers
- zbullet - Zig bindings and C API for Bullet physics library
- zmesh - loading, generating, processing and optimizing triangle meshes
- znoise - Zig bindings for FastNoiseLite
- ztracy - support for CPU profiling with Tracy
- zpool - generic pool & handle implementation
- znetwork - Zig bindings for ENet (experimental)
- 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)
- Works on Windows, Linux and MacOS
- Has zero dependency except Zig compiler (master),
gitwith 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 wgpu)
Some of the sample applications are listed below. More can be found in samples directory.
physically based rendering (wgpu): This sample implements physically-based rendering (PBR) and image-based lighting (IBL) to achive realistic looking rendering results.
zig build physically_based_rendering_wgpu-run
bullet physics test (wgpu): This sample application demonstrates how to use full 3D physics engine in your Zig programs.
zig build bullet_physics_test_wgpu-run
procedural mesh (wgpu): This sample shows how to efficiently draw several procedurally generated meshes.
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.
rasterization: This sample application shows how GPU rasterizes triangles in slow motion.
zig build rasterization-run
simple raytracer: This sample implements basic hybrid renderer. It uses rasterization to resolve primary rays and raytracing (DXR) for shadow rays.
zig build simple_raytracer-run
mesh shader test: This sample shows how to use DirectX 12 Mesh Shader.
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):
git clone https://github.com/michal-z/zig-gamedev.git
Build artifacts will show up in
zig build <sample_name> will build sample application named
zig build <sample_name>-run will build and run sample application named
To list all available sample names run
zig build --help and navigate to
All sample applications support the following build options:
-Drelease-safe=[bool]- Optimizations on and safety on
-Drelease-fast=[bool]- Optimizations on and safety off
-Dztracy-enable=[bool]- Tracy profiler zones enabled
-Dzgpu-dawn-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)
-Dzpix-enable=[bool]- PIX markers and events enabled
Thanks to all people who sponsor zig-gamedev project! In particular, these fine folks sponsor zig-gamedev for $25/month or more: