Building game development ecosystem for @ziglang!

Overview

If you are new to low-level graphics programming or you would like to learn about some zig-gamedev libraries I recommend starting with intro applications.

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 procedural mesh (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 procedural_mesh_wgpu-run

Some features:

  • Works on Windows, Linux and Mac (sample applications are WIP on Linux and Mac)
  • Zero dependency except Zig compiler (master), git with 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)
  • Uses native version of WebGPU API (mach/gpu) for cross-platfrom graphics and DirectX 12 for low-level graphics on Windows
  • Uses some great, carefully selected C/C++ libraries which are seamlessly built by zig cc compiler

Libraries we develop/maintain:

  • zmath - SIMD math library for game developers [cross-platform and standalone]
  • zbullet - Zig bindings and C API for Bullet physics library [cross-platform and standalone]
  • zmesh - loading, generating, processing and optimizing triangle meshes [cross-platform and standalone]
  • znoise - Zig bindings for FastNoiseLite [cross-platform and standalone]
  • zenet - Zig bindings for ENet [cross-platform and standalone]
  • ztracy - support for CPU profiling with Tracy [cross-platform and standalone]

Additionally for Windows applications we provide:

  • zwin32 - Zig bindings for Win32 API [standalone]
  • zd3d12 - helper library for working with DirectX 12 [depends only on zwin32]
  • zxaudio2 - helper library for working with XAudio2 [depends only on zwin32]
  • zpix - support for GPU profiling with PIX [depends only on zwin32]
  • Interop with Direct2D and DirectWrite for high-quality vector graphics and text rendering (optional)

Project vision:

  • Collection of cross-platform, standalone and composable libraries for game developers
  • Written from scratch in Zig or bindings to carefully selected C/C++ code
  • Non-allocating or taking Zig allocator
  • Tested (tests, samples, mini-games)
  • Well maintained

If you like it, please consider supporting me. Thanks!

Sample applications

Some of the sample applications are listed below. More can be found in samples directory.

  1. rasterization: This sample application shows how GPU rasterizes triangles in slow motion.

    rasterization

  2. physically based rendering: This sample implements physically based shading and image based lighting to achive realistic looking rendering results.

    physically based rendering

  3. simple raytracer: This sample implements basic hybrid renderer. It uses rasterization to resolve primary rays and raytracing (DXR) for shadow rays.

    simple raytracer

  4. mesh shader test: This sample shows how to use DirectX 12 Mesh Shader.

    mesh shader test

  5. virtual physics lab: This sample application demonstrates how to use full 3D physics engine in your Zig programs.

    virtual physics lab

  6. audio playback test: This sample demonstrates how to decode .mp3 file using Microsoft Media Foundation and play it back using Windows Audio Session API (WASAPI).

    audio playback test

  7. DirectML convolution test: This sample demonstrates how to perform GPU-accelerated convolution operation using DirectML.

    directml convolution test

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.

Zig compiler consists of a single ~60MB .zip file that needs to be downloaded separately. Latest development build of the compiler must be used (master) you can download prebuilt binaries here.

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

Examples

zig build triangle_wgpu-run -Drelease-fast=true

Requirements

On Windows, project uses DirectX 12 Agility SDK which allows to always use latest DirectX 12 features regardless of Windows version installed (this works from Windows 10 November 2019). In particular, following Windows versions are supported:

  • Windows 10 May 2021 (Build 19043) or newer
  • Windows 10 October 2020 (Build 19042.789+)
  • Windows 10 May 2020 (Build 19041.789+)
  • Windows 10 November 2019 (Build 18363.1350+)

GitHub Sponsors

Thanks to all people who sponsor zig-gamedev project! In particular, these fine folks sponsor zig-gamedev for $25/month or more:

  • mzet (mzet-)
  • Zig Software Foundation (ziglang)
  • Ian (LinuXY)
  • Simon A. Nielsen Knights (tauoverpi)
  • shintales (shintales)
  • Chris Heyes (hazeycode)
Issues
  • MacOS doesn't show imgui interface

    MacOS doesn't show imgui interface

    Hello again Michal,

    I just pulled down zig-gamedev (version 2684288794864ab1f59acd40db576b02b00764c4) on Win10 (with a Vega64 card, bottom left), Arch Linux (R9 380 card, bottom right) and an M1 Mac (Big Sur, top right). Everything seemed to build and run fine at first glance (except the error with tests previously mentioned in https://github.com/michal-z/zig-gamedev/issues/51), but then I clued in to the fact that the MacOS version doesn't have any imgui interface for the wgpu examples. Here is a pic of all three running the triangle example: Zig-GameDev-MacOS-Linux-Win10

    Perhaps the MacOS version shouldn't have the interface and I just missed it in the docs? Or is this a bug on my machine?

    P.S. Also, one small difference I noticed between these three programs is that the Win10 spinning triangles actually stop spinning when I drag the window around...then the spinning starts again after I stop dragging the window around (or even if I just right click on the window header! ). The Arch/Mac triangles continue to spin if I drag the window around. A Win10 quirk with the driver? Not sure...and not a big deal, I am just mentioning it as a curiosity.

    opened by wilsonk 100
  • Samples do not compile

    Samples do not compile

    I have tried using zig 0.9.0 from master but that gave me an error. So I tried zig 0.8.1 and it gave me another error, this one:

    .\build.zig:11:55: error: no member named 'custom' in union 'std.build.InstallDir'
            .{ .source_dir = "content", .install_dir = .{ .custom = "" }, .install_subdir = "bin/content" },
                                                          ^
    
    opened by gonutz 57
  • Can't build `physically_based_rendering_wgpu` on macOS aarch64 with latest zig

    Can't build `physically_based_rendering_wgpu` on macOS aarch64 with latest zig

    I'm not sure what to make of this. Perhaps there are breaking changes between zig 0.10.0-dev.2412 and 0.10.0-dev.2432?

    I'm running this on an M1 MacBook Pro:

    $ which zig
    /opt/homebrew/bin/zig
    
    $ zig version
    0.10.0-dev.2432+22cb69388
    
    $ zig build physically_based_rendering_wgpu-run -Dzgpu-dawn-from-source=true
    physically_based_rendering_wgpu...The following command terminated unexpectedly:
    /opt/homebrew/Cellar/zig/HEAD-22cb693/bin/zig build-exe /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/samples/physically_based_rendering_wgpu/src/physically_based_rendering_wgpu.zig /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/zig-cache/o/a0c8aa40f2e181dae0eeb5eb755e6c16/libglfw.a -lc -lobjc /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/zig-cache/o/21728128ca4896a8d9f2b9fe46c6bd76/libdawn.a /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/zig-cache/o/2b87efb10438e9ae9b25a6dc94173d96/libzgpu.a /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/zig-cache/o/f9eea545a46bb68b7cf9b59731e0da3f/libzmesh.a -lc -lobjc -lc++ -lc -lobjc -lobjc -lc -lobjc -lc -lobjc -lc -lobjc -lc -lobjc -lc++ -lc -lobjc -lobjc -lc -lobjc -lc -lobjc -lc -lc++ --cache-dir /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/zig-cache --global-cache-dir /Users/garett/.cache/zig --name physically_based_rendering_wgpu --pkg-begin build_options /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/zig-cache/options/KimUQtjc7RFpo30ttlCeCnEVoKTO4Fp3KObMkkFf-lXXItBkl11o3Of7QhylyeSP --pkg-end --pkg-begin zmesh /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/libs/zmesh/src/main.zig --pkg-begin zmesh_options /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/zig-cache/options/WxkzBf3w9kJGY9q5y7SiPj0jvFY2DjkNCi-Ovg_84iimoERP7gmh4g7gb2By0gxe --pkg-end --pkg-end --pkg-begin glfw /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/libs/mach-glfw/src/main.zig --pkg-end --pkg-begin zgpu /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/libs/zgpu/src/zgpu.zig --pkg-begin zgpu_options /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/zig-cache/options/YlIhfB2NyOIjaFu_elfbPcNHrz1bry-eT_AAiCBXWsahD6UwUcWXZUFIetT057fK --pkg-end --pkg-begin glfw /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/libs/mach-glfw/src/main.zig --pkg-end --pkg-end --pkg-begin zmath /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/libs/zmath/src/zmath.zig --pkg-end --pkg-begin zgpu_options /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/zig-cache/options/YlIhfB2NyOIjaFu_elfbPcNHrz1bry-eT_AAiCBXWsahD6UwUcWXZUFIetT057fK --pkg-end --pkg-begin zmesh_options /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/zig-cache/options/WxkzBf3w9kJGY9q5y7SiPj0jvFY2DjkNCi-Ovg_84iimoERP7gmh4g7gb2By0gxe --pkg-end -isystem /Users/garett/Library/Application Support/hexops/sdk-macos-12.0/root/usr/include -I /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/libs/mach-glfw/upstream/glfw/include -I /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/libs/mach-glfw/upstream/vulkan_headers/include -isystem /Users/garett/Library/Application Support/hexops/sdk-macos-12.0/root/usr/include -I /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/libs/mach-gpu-dawn/libs/dawn/out/Debug/gen/include -I /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/libs/mach-gpu-dawn/libs/dawn/include -I /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/libs/mach-gpu-dawn/src/dawn -I /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/libs/zgpu/libs -I /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/libs/zmesh/libs/cgltf -L /Users/garett/Library/Application Support/hexops/sdk-macos-12.0/root/usr/lib -L /Users/garett/Library/Application Support/hexops/sdk-macos-12.0/root/usr/lib -iframework /Users/garett/Library/Application Support/hexops/sdk-macos-12.0/root/System/Library/Frameworks -F /Users/garett/Library/Application Support/hexops/sdk-macos-12.0/root/System/Library/Frameworks -iframework /Users/garett/Library/Application Support/hexops/sdk-macos-12.0/root/System/Library/Frameworks -F /Users/garett/Library/Application Support/hexops/sdk-macos-12.0/root/System/Library/Frameworks -framework CoreFoundation -framework Foundation -framework CoreGraphics -framework QuartzCore -framework Metal -framework IOSurface -framework IOKit -framework CoreServices -framework AppKit --enable-cache 
    error: the following build command failed with exit code 11:
    /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/zig-cache/o/e8d626cab16e47049ee12462c311d972/build /opt/homebrew/Cellar/zig/HEAD-22cb693/bin/zig /Users/garett/Dropbox/Garett/GitHub/zig-gamedev /Users/garett/Dropbox/Garett/GitHub/zig-gamedev/zig-cache /Users/garett/.cache/zig physically_based_rendering_wgpu-run -Dzgpu-dawn-from-source=true
    
    opened by garettbass 21
  • Undefined symbol _sincosf on an M1 Mac mini with Big Sur installed

    Undefined symbol _sincosf on an M1 Mac mini with Big Sur installed

    Hello Michal,

    Just opening a separate issue from https://github.com/michal-z/zig-gamedev/issues/50, as suggested.

    I am getting the error below when trying to run the tests on my M1 Mac mini (Big Sur) with zig master branch built today (0.10.0-dev.1860+7b090df66):

     wilsonk  ~  zig-gamedev   main  zig build test -Drelease-fast -Ddawn-from-source=true
    All 9 tests passed.
    All 4 tests passed.
    LLVM Emit Object... error(link): undefined reference to symbol '_sincosf'
    error(link):   first referenced in '/Users/wilsonk/zig-gamedev/zig-cache/o/bede7d83f1692d97996a78a4dce04395/test.o'
    thread 2335881 panic: attempt to unwrap error: UndefinedSymbolReference
    /Users/wilsonk/Downloads/zig/src/link/tapi/yaml.zig:59:28: 0x10337fa83 in link.tapi.yaml.Value.asList (zig1)
            if (self != .list) return error.TypeMismatch;
    .
    .
    .
    

    I get the error with or without -Dtarget=aarch64-macos-gnu and in Debug or Release. This seems to be a problem with zig/macos, as per this thread: https://github.com/ziglang/zig/issues/10318

    opened by wilsonk 19
  • cbullet compile failed on linux

    cbullet compile failed on linux

    Hi @michal-z, I'm trying to compile cbullet on linux/x64, got following error:

    cbullet.cpp:628:1: error: static_assert failed due to requirement '(sizeof(btTriangleIndexVertexArray) % 16) == 0' "sizeof(btTriangleIndexVertexArray) is not multiple of 16"
    cbullet.cpp:814:1: error: static_assert failed due to requirement '(sizeof(btRigidBody) % 16) == 0' "sizeof(btRigidBody) is not multiple of 16"
    cbullet.cpp:816:1: error: static_assert failed due to requirement '((sizeof(btRigidBody) + sizeof(btDefaultMotionState)) % 16) == 0' "sizeof(btRigidBody) + sizeof(btDefaultMotionState) is not multiple of 16"
    

    My zig version is latest release 0.9.0.

    opened by Jack-Ji 16
  • executables can't be launched from explorer

    executables can't be launched from explorer

    Looks like the resulting executables can't be launched from Windows explorer. My guess is because they can't find the corresponding assets which live relative to the sample directory.

    I suggest that the samples instead use the executable directory to find the assets. You can use std.fs.selfExePath for this.

    opened by marler8997 14
  • Bindless textures sample

    Bindless textures sample

    Hello there, I've finally understood how to work with bindless textures (or any shader visible descriptor for that matter) and I've put together a small sample to illustrate how it could work in the context of zig-gamedev.

    I've had to make 2 main changes to graphics.zig, both non-breaking hopefully.

    515e43f adds another createGraphicsShaderPipeline* variation that takes in a Root Signature as input. 36994cd adds a PersistentDescriptorHeap that can be reserved upon initialization and that I'm using in the provided sample for all bindless resources.

    I think that the PersistentDescriptorHeap should be more integrated into GraphicsContext or maybe even collapsed into DescriptorHeap.

    I've used Matt Pettineo's chapter and code from Ray Tracing Gems 2 as a guide for this implementation. The DescriptorHeap struct in particular (and associated operations) were really insightful. https://github.com/TheRealMJP/DXRPathTracer/blob/master/SampleFramework12/v1.02/Graphics/GraphicsTypes.h#L38

    I consider this PR an MVP or proof of concept. The API's I've added are not really ergonomic, "bindless mipmaps" are broken and the PersistentDescriptorHeap is not thread-safe.

    Before I go ahead, I'd like to have your thoughts and feedback since I feel like the changes I'm proposing are more "architectural" than a simple API usage sample :)

    Have a great day!

    opened by gmodarelli 13
  • Add zgpu dependency on zpool

    Add zgpu dependency on zpool

    • Set -Dzgpu-dawn-from-source=true on macOS
    • Change obsolete Pkg.path to new Pkg.source in zpool/build.zig
    • First naive attempt to add zgpu dependency on zpool. This does not work, but I don't understand how it should work. Please advise.
    opened by garettbass 12
  • Bug | zmath: segfault on returning an anonymous struct directly

    Bug | zmath: segfault on returning an anonymous struct directly

    OS: MacOS System: Intel i7 (Macbook Pro 2019) Zig Version: 0.9.1

    EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

    I am not sure if this is a library issue:

    // causes a segfault on accesing sc[1] (address is supposedly 0x0?)
    pub fn rotationZ(angle: f32) Mat {
        const sc = sincos(angle);
        return .{
            f32x4(sc[1], sc[0], 0.0, 0.0),
            f32x4(-sc[0], sc[1], 0.0, 0.0),
            f32x4(0.0, 0.0, 1.0, 0.0),
            f32x4(0.0, 0.0, 0.0, 1.0),
        };
    }
    // this 'fixed' version works fine
    pub fn rotationZ(angle: f32) Mat {
        const sc = sincos(angle);
        const result = .{
            f32x4(sc[1], sc[0], 0.0, 0.0),
            f32x4(-sc[0], sc[1], 0.0, 0.0),
            f32x4(0.0, 0.0, 1.0, 0.0),
            f32x4(0.0, 0.0, 0.0, 1.0),
        };
    
        return result;
    }
    
    opened by skrax 11
  • HLSL DynamicResources and SM 6.6 support

    HLSL DynamicResources and SM 6.6 support

    Hello there. I wanted to try the new DynamicResources feature introduced with Shader Model 6.6, and I had a quick go at enabling them in graphics.zig.

    Here's the link to the specs: https://microsoft.github.io/DirectX-Specs/d3d/HLSL_SM_6_6_DynamicResources.html

    And here's the link to the commit on my fork: https://github.com/gmodarelli/zig-gamedev/commit/3d895bd9a916c40d1b2f934cc23f669ea8dcc3b1

    I see how "forcing" Shader Model 6.6 could restrict a bit the pool of supported devices. That's why I didn't go directly for a PR and wanted your input on this.

    Have a nice day!

    opened by gmodarelli 9
  • Question: what are the criteria for getting a function into zmathlib?

    Question: what are the criteria for getting a function into zmathlib?

    Hallo!! Very nice work 💯

    I wanted to contribute a few fast approximation for common mathematical functions, what is the required accuracy for a math function to be accepted into zmath?

    Kindest regards, Francesco

    opened by francescoalemanno 5
  • Shader Interop

    Shader Interop

    Hello there, I don't think this is really an "issue", but I wanted to know if there are plans to introduce some form of shader interoperability between Zig and HLSL.

    I haven't had a need for it until yesterday and my first idea was to declare structs and DEFINEs in a C header file and import it in Zig and include it into my HLSL shaders.

    Any thoughts on it? Thank you :)

    opened by gmodarelli 6
  • Samples wishlist

    Samples wishlist

    Hey! I really love the progress and currently also learning Zig. Maybe you have some paticular samples which you would to code, but just haven't time, so I or community could contribute?

    enhancement 
    opened by krupitskas 4
Releases(v0.5.0)
Owner
Michal Ziulek
Independent gfx programmer. Builds game dev ecosystem for @ziglang. In the past: AMD, EA DICE, Intel.
Michal Ziulek
Kit: a magical, high performance programming language, designed for game development

Kit: a magical, high performance programming language, designed for game development

Kit Programming Language 990 Jun 25, 2022
Texture Packer for Game Development Using MaxRects Algorithm

Overview Texture Packer for Game Development Using MaxRects Algorithm. Note: The game assets used in this example were download from Grassland Tileset

Jeremy HU 61 May 2, 2022
Scrollytroller is a crank-based USB controller, initially inteneded for use with Playdate's Pulp web-based game development tool

Scrollytroller Scrollytroller is a crank-based USB controller, initially inteneded for use with Playdate's Pulp web-based game development tool. This

Scott Lawrence 4 Feb 17, 2022
a minimal C++, SDL2, OpenGL abstraction for general game and application development

hept the hept abstraction is a minimal lightweight layer above C++ and SDL dependencies: - SDL2 - C++17 or above - GLM example use: #include "hept.h"

ENDESGA 10 May 23, 2022
Building and Executing Position Independent Shellcode from Object Files in Memory

PIC-Privileges Building and Executing Position Independent Shellcode from Object Files in Memory. This is a pingback to the blogpost I wrote at https:

Paranoid Ninja 75 Jun 23, 2022
Typesense is a fast, typo-tolerant search engine for building delightful search experiences.

Fast, typo tolerant, fuzzy search engine for building delightful search experiences ⚡ ??

Typesense 10.2k Jun 27, 2022
A set of very empty header files that can be used when building apps with Cosmopolitan

cosmo-include A set of very empty header files that can be used when building apps with Cosmopolitan Why? When you build an application with Cosmopoli

null 18 May 9, 2022
NightDriverStrip is a source code package for building a flash program that you upload to the ESP32 microcontroller.

NightDriverStrip is a source code package for building a flash program that you upload to the ESP32 microcontroller.

Plummer's Software LLC 564 Jun 26, 2022
Building Netbsd's Amiga port 'loadbsd' tool.

Building Netbsd's Amiga port 'loadbsd' tool. During a netbsd install, I realized the binary Netbsd provided didn't match the functionality described i

Roc Vallès 1 Oct 5, 2021
A sample project for building Zygisk modules

Developing Zygisk Modules This repository hosts a template zygisk module for developers to start developing Zygisk modules. Before developing Zygisk m

John Wu 187 Jun 24, 2022
The c++ micro framework for building web applications based on workflow

wfrest The c++ micro framework for building web applications based on workflow ⌛️ Build Step 1 : install workflow git clne [email protected]:sogou/workfl

Shiyu Yi 374 Jun 21, 2022
Design files and resources for building a wireless N64 controller

wireless-n64-controller This project and its documentation is a Work-In-Progress. I'm still working on writing everything down and working out kinks i

Spencer Fraint 32 Jun 18, 2022
Qtile ISO profile for building Woof OS using `archiso` with zen kernel

iso-profile ISO profile for Woof OS ISO profile for building Woof OS using archiso Building the ISO profile into an ISO If you are on an Arch based sy

Woof OS 0 Jan 27, 2022
A framework for building native Windows apps with React.

React Native for Windows Build native Windows apps with React. See the official React Native website for an introduction to React Native. React Native

Microsoft 14.8k Jun 25, 2022
A framework for building Mobile cross-platform UI

Weex A framework for building Mobile cross-platform UI. Distribution Support Android 4.1 (API 16), iOS 9.0+ and WebKit 534.30+. platform status Androi

Alibaba 17.9k Jun 26, 2022
SDK for building cross-platform desktop apps in ANSI-C

NAppGUI Cross-Platform C SDK. Build portable desktop applications for Windows, macOS and Linux, using just C. Quick start in Windows Prerequisites Vis

Francisco García Collado 194 Jun 23, 2022
Repository for building and operating REVOLVER: An automatic protein purification system for gravity columns. Developed at the University of Toronto.

REVOLVER: An automated protein purification system This repository contains all the hardware and firmware files to build and operate REVOLVER: an auto

Laboratory for Metabolic Systems Engineering 3 Jun 14, 2022
MyOwnBricks - A library for building your own sensors and devices compatible with the modern LEGO PoweredUp system.

English version (See at the end for the French version) MyOwnBricks MyOwnBricks is a library for building your own sensors and devices compatible with

null 5 Jun 27, 2022
Pipet - c++ library for building lightweight processing pipeline at compile-time for string obfuscation, aes ciphering or whatever you want

Pipet Pipet is a lightweight c++17 headers-only library than can be used to build simple processing pipelines at compile time. Features Compile-time p

C. G. 57 Jan 10, 2022