Code Monkey home page Code Monkey logo

zig-gamedev's Introduction

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

Libraries

Library Latest version Description
zgpu 0.9.0 Small helper library built on top of native wgpu implementation (Dawn)
zgui 0.9.5 Easy to use dear imgui bindings (includes ImPlot)
zaudio 0.9.3 Fully-featured audio library built on top of miniaudio
zmath 0.9.5 SIMD math library for game developers
zstbi 0.9.2 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 10+ (DirectX 12), macOS 12+ (Metal) and Linux (Vulkan)
  • 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) 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

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

Addidtional 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:

zig-gamedev's People

Contributors

michal-z avatar pyrolistical avatar gmodarelli avatar hazeycode avatar garettbass avatar jack-ji avatar foxnne avatar deanoc avatar yusdacra avatar avokadoen avatar srekel avatar ckrowland avatar briangold avatar geffdev avatar damienfir avatar marler8997 avatar kamidev avatar mlarouche avatar mrkishi avatar mzet- avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.