Project requires Zig 0.10.0-dev.3027 (master) or newer to compile.
zig-gamedev project
This repository contains a collection of sample applications and cross-platform, composable libraries written in Zig programming language. Currently, it provides a solution for: 3D graphics, multi-threaded physics, SIMD math, audio, GUI, noise generation and profiling.
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.
If you are interested, please see Monthly Progress Reports and our Roadmap.
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.3027 (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 wgpu API (Dawn)
- zaudio - Cross-platform audio built on top of miniaudio library
- 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)
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 wgpu API (mach/gpu-dawn) 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
-
audio experiments (wgpu): This sample lets the user to experiment with audio and observe data that feeds the hardware!
zig build audio_experiments_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
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-Dztracy-enable=[bool]
- Tracy profiler zones enabled-Dzgpu-dawn-from-source=[bool]
- Build Dawn (wgpu 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
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)
- Connor Rowland (ckrowland)
- Zig Software Foundation (ziglang)
- Ian (LinuXY)
- Simon A. Nielsen Knights (tauoverpi)
- shintales (shintales)
- Joran Dirk Greef (jorangreef)