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:
- 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
- znetwork - Zig bindings for ENet
- ztracy - support for CPU profiling with Tracy
- zpool - generic pool & handle implementation
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 andcurl
- 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.
-
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
-
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
-
virtual physics lab: This sample application demonstrates how to use full 3D physics engine in your Zig programs.
zig build bullet_physics_test-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
cd zig-gamedev
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:
- Derek Collison (derekcollison)
- mzet (mzet-)
- Garett Bass (garettbass)
- Zig Software Foundation (ziglang)
- Ian (LinuXY)
- Simon A. Nielsen Knights (tauoverpi)
- shintales (shintales)
- Chris Heyes (hazeycode)
- Joran Dirk Greef (jorangreef)