• Stars
    star
    1,728
  • Rank 26,983 (Top 0.6 %)
  • Language
    C
  • License
    MIT License
  • Created over 3 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Building game development ecosystem for @ziglang!

Please note that the project requires latest Zig compiler (master/nightly). It can be downloaded here.

Libraries - Sample applications - Vision - Others using zig-gamedev - Monthly reports - Roadmap

zig-gamedev project

We build game development ecosystem for Zig programming language, everyday since July 2021. Please consider supporting the project. We create:

To get started on Windows/Linux/macOS 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

Quick start (D3D12)

To use zig-gamedev in your project copy or download zig-gamedev as a sumboulde, for example:

git submodule add https://github.com/michal-z/zig-gamedev.git libs/zig-gamedev

Currently we have minimal low-level API which allows you to build the lib once (package()) and link it with many executables (link()).

Include neccessary libraries in build.zig like:

// Fetch the library
const zwin32 = @import("src/deps/zig-gamedev/libs/zwin32/build.zig");

// Build it
const zwin32_pkg = zwin32.package(b, target, optimize, .{});

// Link with your app
zwin32_pkg.link(exe, .{ .d3d12 = true });
Example build script:
const std = @import("std");
const zwin32 = @import("libs/zig-gamedev/libs/zwin32/build.zig");
const common = @import("libs/zig-gamedev/libs/common/build.zig");
const zd3d12 = @import("libs/zig-gamedev/libs/zd3d12/build.zig");

pub fn build(b: *std.Build) void {
    const target = b.standardTargetOptions(.{});

    const optimize = b.standardOptimizeOption(.{});

    const exe = b.addExecutable(.{
        .name = "example",
        .root_source_file = .{ .path = "src/main.zig" },
        .target = target,
        .optimize = optimize,
    });

    b.installArtifact(exe);

    const run_cmd = b.addRunArtifact(exe);

    run_cmd.step.dependOn(b.getInstallStep());

    if (b.args) |args| {
        run_cmd.addArgs(args);
    }

    const zwin32_pkg = zwin32.package(b, target, optimize, .{});
    const zd3d12_pkg = zd3d12.package(b, target, optimize, .{
        .options = .{
            .enable_debug_layer = false,
            .enable_gbv = false,
            .enable_d2d = true,
        },
        .deps = .{ .zwin32 = zwin32_pkg.zwin32 },
    });
    const common_d2d_pkg = common.package(b, target, optimize, .{
        .deps = .{ .zwin32 = zwin32_pkg.zwin32, .zd3d12 = zd3d12_pkg.zd3d12 },
    });

    zwin32_pkg.link(exe, .{ .d3d12 = true });
    zd3d12_pkg.link(exe);
    common_d2d_pkg.link(exe);

    const run_step = b.step("run", "Run the app");
    run_step.dependOn(&run_cmd.step);
}

Libraries

Library Latest version Description
zphysics 0.0.6 Zig API and C API for Jolt Physics
zflecs 0.0.1 Zig bindings for flecs ECS
zopengl 0.1.0 OpenGL loader (supports 3.3 Core Profile and ES 2.0 Profile)
zsdl 0.0.1 Bindings for SDL2 (wip)
zgpu 0.9.0 Small helper library built on top of native wgpu implementation (Dawn)
zgui 1.89.6 Easy to use dear imgui bindings (includes ImPlot)
zaudio 0.9.3 Fully-featured audio library built on top of miniaudio
zmath 0.9.6 SIMD math library for game developers
zstbi 0.9.3 Image reading, writing and resizing with stb libraries
zmesh 0.9.0 Loading, generating, processing and optimizing triangle meshes
ztracy 0.9.0 Support for CPU profiling with Tracy
zpool 0.9.0 Generic pool & handle implementation
zglfw 0.5.2 Minimalistic GLFW bindings with no translate-c dependency
znoise 0.1.0 Zig bindings for FastNoiseLite
zjobs 0.1.0 Generic job queue implementation
zbullet 0.2.0 Zig bindings and C API for Bullet physics library
zwin32 0.9.0 Zig bindings for Win32 API (d3d12, d3d11, xaudio2, directml, wasapi and more)
zd3d12 0.9.0 Helper library for DirectX 12
zxaudio2 0.9.0 Helper library for XAudio2
zpix 0.9.0 Support for GPU profiling with PIX for Windows

Vision

  • Very modular "toolbox of libraries", user can use only the components she needs
  • Works on Windows, macOS and Linux
  • Has zero dependency except Zig compiler (master) and git with Git LFS - 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 for carefully selected C/C++ libraries
  • Uses native wgpu implementation (Dawn) or OpenGL for cross-platfrom graphics and DirectX 12 for low-level graphics on Windows

Sample applications (native wgpu)

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.
    zig build physically_based_rendering_wgpu-run

    physically based rendering (wgpu)

  2. 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

    audio experiments (wgpu)

  3. 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

    bullet physics test (wgpu)

  4. procedural mesh (wgpu): This sample shows how to efficiently draw several procedurally generated meshes.
    zig build procedural_mesh_wgpu-run

    procedural mesh (wgpu)

  5. gui test (wgpu): This sample shows how to use our zgui library.
    zig build gui_test_wgpu-run

    gui test (wgpu)

Sample applications (DirectX 12)

Some of the sample applications are listed below. More can be found in samples directory. They can be built and run on Windows and Linux (Wine + VKD3D-Proton 2.8+):

  1. bindless: This sample implements physically based shading and image based lighting to achive realistic looking rendering results. It uses bindless textures and HLSL 6.6 dynamic resources.
    zig build bindless-run

    bindless

  2. rasterization: This sample application shows how GPU rasterizes triangles in slow motion.
    zig build rasterization-run

    rasterization

  3. 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

    simple raytracer

  4. mesh shader test: This sample shows how to use DirectX 12 Mesh Shader.
    zig build mesh_shader_test-run

    mesh shader test

Others using zig-gamedev

  • Aftersun - Top-down 2D RPG
  • Pixi - Pixel art editor made with Zig
  • Simulations - GPU Accelerated agent-based modeling to visualize and simulate complex systems
  • elvengroin legacy - TBD
  • jok - A minimal 2D/3D game framework for Zig

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

Options for Windows applications:

  • -Dzd3d12-enable-debug-layer=[bool] - Direct3D 12, Direct2D, DXGI debug layers enabled
  • -Dzd3d12-enable-gbv=[bool] - Direct3D 12 GPU-Based Validation (GBV) enabled
  • -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:

More Repositories

1

eneida

Experimental demoscene project using C99 and Direct3D 12. Fully standalone with custom windows, and d3d12 headers. No Windows SDK, libc or Visual Studio dependency. C and HLSL compilers included.
C++
138
star
2

pbr-test

Graphics demo (DirectX 12, PBR, IBL, C++20 modules).
HLSL
61
star
3

Rasterization_Demo

Rasterization on the GPU in "slow motion".
C
59
star
4

zig-d3d12-starter

DirectX 12 + Zig programming language - complete starter project
Zig
44
star
5

SimpleRaytracer

Simple raytracer using DirectX Raytracing (DXR).
C++
42
star
6

ImageBasedPBR

Image Based Lighting using DirectX 12.
C++
41
star
7

1kdemo

Framework for creating 1k demoscene intros.
Assembly
39
star
8

zig-d3d12-test

Basic 3D rendering framework. Fully self-contained (no dependency on Visual Studio, libc or Windows SDK).
Zig
19
star
9

DXRPrimaryRays

Raytracing test that shows how primary rays are dispatched on the GPU.
C++
14
star
10

asmart

Various programming experiments written in x86_64 assembly language.
Assembly
12
star
11

SimpleDirectPBR

Simple PBR test using DirectX 12.
C++
11
star
12

dawn-bin

C
9
star
13

DXRTest

Simple raytracing test using DirectX 12 Raytracing.
C++
8
star
14

qjulia

Quaternion Julia Sets rendering on the CPU (AVX2, C, asm, no CRT).
C
7
star
15

genartexp_0000_zig

C
5
star
16

PerformanceExperiments

Real-time raymarching on the CPU.
Assembly
5
star
17

vimfiles

Vim Script
5
star
18

ShaderV

Minimal GLSL shader viewer with very simple live-editing support.
Assembly
5
star
19

Dx12DemoBase

C++
4
star
20

dx12_asm_sample

DirectX 12 sample coded in assembly language.
Assembly
3
star
21

generative-art-experiments

C++
3
star
22

SkeletonCpuAvx2

C
2
star
23

genexp

generative art experiments
Zig
2
star
24

SoftwareRenderingToy

(Almost) Real-time rendering on the CPU.
C
2
star
25

physics-test

HLSL
2
star
26

Sketchbook

C++
2
star
27

NBody

NBody simulation using DirectX 12
C++
2
star
28

MandelbrotCpuAvx2

Real-time Mandelbrot rendering on the CPU.
C++
2
star
29

eneida__

Minimalistic generative art project
C++
2
star
30

eneida-old

Graphics, audio, generative art programming. Personal tests and experiments.
C++
2
star
31

julia

C
2
star
32

DemoBox

C
1
star
33

deferred_shading

Deferred shading, async compute, DX12 (wip).
C++
1
star
34

genart_old

C++
1
star
35

demo

C
1
star
36

MyPerfExperiments

C++
1
star
37

100kDrawCalls

100k draw calls benchmark
C
1
star
38

eneida-software

C++
1
star
39

webgpu_dawn-x86_64-windows-gnu

Zig
1
star
40

eneida_

CPU and GPU programming experiments
C++
1
star
41

Demo1

C++
1
star
42

Dx12Samples

C++
1
star
43

QJuliaCpuAvx2

Real-time Quaternion Julia Sets rendering on the CPU (C99, SIMD, Windows Thread Pools).
C
1
star
44

AsmBase

Assembly
1
star
45

Desert

Graphics experiments codenamed Desert.
C
1
star
46

Triangle

C
1
star
47

ArtOfComputerProgramming

Assembly
1
star
48

ofEmptyExample

C++
1
star
49

LossAversion

C++
1
star
50

Demoscene

C++
1
star