Awesome
A Collection of C/C++ libraries for game development
<!-- TOC --> <!-- /TOC -->System
Base
Lib | Title |
---|---|
bkaradzic/bx | Base library |
septag/sx | Portable base library for C programmers, tailored for performance and simplicity |
nothings/stb | stb single-file public domain libraries for C/C++ |
RandyGaul/cute_headers | One-file C/C++ libraries with no dependencies, primarily used for games |
vurtun/mmx | single header libraries for C/C++ |
zpl-c/zpl | Your C99 Powerkit |
niklas-ourmachinery/bitsquid-foundation | A minimalistic foundation library with functions for memory allocation, basic collections, etc. The library has been written with a data-oriented philosophy: POD structures are preferred over classes, flat arrays are the preferred data structure, etc. |
Math
Lib | Title |
---|---|
Hypatia | Pure C math library 2D/3D graphics. Seeks to be close to C89/C90 compliant for portability. |
g-truc/glm | OpenGL Mathematics (GLM) |
recp/cglm | Optimized OpenGL/Graphics Math (glm) for C |
google/mathfu | C++ math library developed primarily for games focused on simplicity and efficiency. |
ferreiradaselva/mathc | Pure C math library for 2D and 3D programming |
demianmnave/CML | The Configurable Math Library http://cmldev.net |
sce_vectormath | Vector math library |
Imath | Imath |
Handmade-Math | A simple math library for games and computer graphics. |
felselva/mathc | Pure C math library for 2D and 3D programming. |
PX4/eigen | Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms. http://eigen.tuxfamily.org/ |
laze-lib/blaze | Blaze is an open-source, high-performance C++ math library for dense and sparse arithmetic. |
sgorsten/linalg | linalg.h is a single header public domain linear algebra library for C++11 |
Windowing/Inputs
Lib | Title |
---|---|
SDL | Simple DirectMedia Layer |
SFML | Simple and Fast Multimedia Library |
glfw | A multi-platform library |
gainput | C++ input library for games |
wgois/OIS | Object oriented Input System https://wgois.github.io/OIS/ |
ziacko/TinyWindow | a cross platform (Linux and Windows) OpenGL window library in a single header |
nyorain/ny | Modern C++ cross-platform window abstraction |
Threading
Lib | Title |
---|---|
rhoot/sc | Cross platform co-routine library exposed through a minimal C API |
deboost.context | "Deboostified" version of boost.context (coroutines), Plain and simple C API for context switching. Easy build on multiple platforms. |
SergeyMakeev/TaskScheduler | Multithreaded task scheduler experiments |
dougbinks/enkiTS | C++ and C multithreading task scheduler |
Freeeaky/fiber-job-system | Multi-Threaded Job System using Fibers |
RichieSams/FiberTaskingLib | A library for enabling task-based multi-threading. It allows execution of task graphs with arbitrary dependencies. |
JodiTheTigger/sewing | Small C API Multiplatform multithreaded fiber based job system |
Pithikos/C-Thread-Pool | A minimal but powerful thread pool in ANSI C |
mbrossard/threadpool | A simple C Thread pool implementation |
tinycthread/tinycthread | Small, portable implementation of the C11 threads API |
yohhoy/thread | C11 <threads.h> emulation library |
Memory Allocators
Lib | Title |
---|---|
mtrebi/memory-allocators | Custom memory allocators in C++ to improve the performance of dynamic memory allocation |
foonathan/memory | STL compatible C++ memory allocator library using a new RawAllocator concept that is similar to an Allocator but easier to use and write. http://foonathan.net/doc/memory |
SergeyMakeev/smmalloc | Blazing fast memory allocator designed for video games |
plasma-umass/Mesh | A memory allocator that automatically reduces the memory footprint of C/C++ applications. |
rampantpixels/rpmalloc | Public domain cross platform lock free thread caching 32-byte aligned memory allocator implemented in C |
microsoft/mimalloc | General purpose allocator with excellent performance characteristics. |
SIMD
Lib | Title |
---|---|
p12tic/libsimdpp | Portable header-only zero-overhead C++ low level SIMD library |
VcDevel/Vc | SIMD Vector Classes for C++ |
nemequ/simde | Implementations of SIMD instruction sets for systems which don't natively support them. |
xtensor-stack/xsimd | C++ wrappers for SIMD intrinsics and parallelized, optimized mathematical functions (SSE, AVX, NEON, AVX512) |
Debugging
Lib | Title |
---|---|
rxi/log.c | A simple logging library implemented in C99 |
spdlog | Fast C++ logging library. |
easy_profiler | Lightweight profiler library for c++ |
crosire/blink | A tool which allows you to edit source code of any Windows C++ project live at runtime |
ddovod/jet-live | c++ hot code reload for linux and macos |
RRZE-HPC/likwid | Performance monitoring and benchmarking suite |
Plugin System/Reflection
Lib | Title |
---|---|
fungos/cr | cr.h: A Simple C Hot Reload Header-only Library |
Manu343726/ctti | Compile Time Type Information for C++ |
Serialization
Lib | Title |
---|---|
felixguendling/cista | Simple C++ Serialization & Reflection. https://cista.rocks |
msgpack/msgpack-c | MessagePack implementation for C and C++ |
sheredom/json.h | json parser for C and C++ |
Engine Components
Rendering
Lib | Title |
---|---|
bkaradzic/bgfx | Cross-platform, graphics API agnostic, "Bring Your Own Engine/Framework" style rendering library. |
floooh/sokol | minimal cross-platform standalone C headers |
DiligentGraphics/DiligentEngine | A modern cross-platform low-level 3D graphics library that supports Direct3D11, Direct3D12, OpenGL/GLES, Vulkan and Metal |
Kode/Kore | Modern low level game library and hardware abstraction |
google/filament | Filament is a real-time physically based rendering engine for Android, Windows, Linux and macOS |
FNA-XNA/FNA3D | 3D Graphics Library for FNA |
grz0zrg/fbg | Lightweight C 2D graphics API agnostic library with parallelism support |
cofenberg/unrimp | Unified renderer implementation ("Un r imp") |
doitsujin/dxvk | Vulkan-based D3D11 and D3D10 implementation for Linux / Wine |
pplux/px | Single header C++ Libraries for Thread Scheduling, Rendering |
intel/fastuidraw | library that provides a higher performance Canvas interface |
V-EZ | V-EZ is an open source, cross-platform (Windows and Linux) wrapper intended to alleviate the inherent complexity and application responsibility of using the Vulkan API. |
ssloy/tinyrenderer | A brief computer graphics / rendering course |
nicebyte/nicegraf | An abstraction layer for low-level platform-specific graphics APIs. |
dr-soft/glbind | Single file OpenGL API loader. |
dr-soft/vkbind | Single file Vulkan API loader. |
LukasBanana/LLGL | Low Level Graphics Library (LLGL) is a thin abstraction layer for the modern graphics APIs OpenGL, Direct3D, Vulkan, and Metal |
zauonlok/renderer | A shader-based software renderer written from scratch in C89 |
zeux/niagara | A Vulkan renderer written from scratch on stream |
Audio
Lib | Title |
---|---|
openal-soft | software implementation of the OpenAL 3D audio API |
FNA-XNA/FAudio | FAudio - Accuracy-focused XAudio reimplementation for open platforms |
soloud | Free, easy, portable audio engine for games |
BareRose/atomix | Portable, single-file, wait-free atomic sound mixing library utilizing SSE-accelerated mixing |
dr-soft/miniaudio | Single file audio playback and capture library |
portaudio | PortAudio is a free, cross-platform, open-source, audio I/O library |
resonance-audio | High fidelity spatial audio at scale. |
Networking
Lib | Title |
---|---|
librg | Pure C99 game networking library |
bkaradzic/bnet | Message oriented networking library using TCP transport |
zeromq/libzmq | ZeroMQ core engine in C++, implements ZMTP/3.1 http://www.zeromq.org |
rxi/dyad | Asynchronous networking for C |
lsalzman/enet | ENet reliable UDP networking library |
jarikomppa/ipc | Public domain, cross platform, single header inter-process communication primitives. This is a "stb like" public domain header-only C/C++ library that provides inter process communication functionality, released under unlicense. |
ValveSoftware/GameNetworkingSockets | Reliable & unreliable messages over UDP. Robust message fragmentation & reassembly. Encryption. |
jeremycw/httpserver.h | Single header library for writing non-blocking HTTP servers in C |
Scripting
Lib | Title |
---|---|
svaarala/duktape | Duktape - embeddable Javascript engine with a focus on portability and compact footprint |
GaijinEntertainment/daScript | daScript - high-performance statically strong typed scripting language https://daScript.org |
UI
Lib | Title |
---|---|
ocornut/imgui | Dear ImGui: Bloat-free Immediate Mode Graphical User interface for C++ with minimal dependencies |
vurtun/nuklear | A single-header ANSI C gui library |
andlabs/libui | Simple and portable (but not inflexible) GUI library in C that uses the native GUI technologies of each platform it supports |
rxi/microui | Tiny immediate-mode UI library |
julianeisel/bWidgets | Basic UI widget toolkit designed for Blender |
idea4good/GuiLite | smallest UI framework for all platform & Docker -- 5k lines code |
littlevgl/lvgl | Graphics library to create an embedded GUI with easy-to-use graphical elements |
wjakob/nanogui | Minimalistic GUI library for OpenGL |
randrew/layout | Single-file library for calculating 2D UI layouts using stacking boxes. Compiles as C99 or C++. |
mikke89/RmlUi | C++ user interface package based on the HTML and CSS standards |
ECS
Lib | Title |
---|---|
skypjack/entt | A fast and reliable entity-component system (ECS) and much more |
redxdev/ECS | C++ single-header entity component system library |
alecthomas/entityx | EntityX - A fast, type-safe C++ Entity-Component system |
discoloda/Diana | Entity Component system like Artemis implemented in C |
SanderMertens/reflecs | Multithreaded entity component system written in C99 |
Animation / Scenegraph
Lib | Title |
---|---|
buserror/libc3 | Lightweight C Scene Graph Library |
guillaumeblanc/ozz-animation | Open source c++ skeletal animation library and toolset |
google/motive | A cross-platform, memory efficient, and performant animation system written in C++ |
Physics
Lib | Title |
---|---|
NVIDIAGameWorks/PhysX | NVIDIA PhysX SDK 4 |
bulletphysics/bullet3 | Bullet Physics SDK: real-time collision detection and multi-physics simulation for VR, games, visual effects, robotics, machine learning etc. |
chriscamacho/bulletCapi | C API for Bullet Physics |
MADEAPPS/newton-dynamics | Newton Dynamics is an integrated solution for real time simulation of physics environments. http://www.newtondynamics.com |
erincatto/Box2D | Box2D is a 2D physics engine for games http://box2d.org |
Chipmunk2D | A fast and lightweight 2D game physics library. |
gjk.c | Gilbert-Johnson-Keerthi (GJK) collision detection algorithm |
phyx | 2D physics engine with SoA/SIMD optimizations |
PlayRho | Real-time oriented physics engine and library that's currently best suited for 2D games |
PositionBasedDynamics | PositionBasedDynamics is a library for the physically-based simulation of rigid bodies, deformable solids and fluids |
nudge | A small data-oriented and SIMD-optimized 3D rigid body physics library. |
ParticleSolver | CPU and GPU implementations of a particle-based physics |
Pathfinding
Lib | Title |
---|---|
jps | Jump Point Search, public domain, single .h (Super fast pathfinding on uniform grids) |
astar-algorithm-cpp | Implementations of the A* algorithm in C++ and C# |
MicroPather | A* solver (astar or a-star) written in platform independent C++ |
recastnavigation | Navigation-mesh Toolset for Games |
Database
Lib | Title |
---|---|
symisc/unqlite | An Embedded NoSQL, Transactional Database Engine |
fnc12/sqlite_orm | SQLite ORM light header only library for modern C++ |
Asset Management
Meshes/Geometry
Processing
Lib | Title |
---|---|
libigl | Simple C++ geometry processing library |
MathGeoLib | library for linear algebra and geometry manipulation for computer graphics |
sseculling | SSE Frustum Culling Demo |
Cullminator9000 | The fastest culler ever |
SeamAwareDecimater | Mesh simplification with UV's boundary preserved |
zeux/meshoptimizer | Mesh optimization library that makes indexed meshes more GPU-friendly |
google/draco | Draco is a library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics. |
Importers/Exporters
Lib | Title |
---|---|
assimp | Official Open Asset Import Library Repository. Loads 40+ 3D file formats into one unified and clean data structure |
nem0/OpenFBX | Lightweight open source FBX importer |
syoyo/tinyobjloader | Tiny but powerful single file wavefront obj loader |
syoyo/tinygltf | Header only C++ Tiny glTF 2.0 loader. |
jkuhlmann/cgltf | Single-file glTF 2.0 parser written in C99 |
microsoft/glTF-SDK | glTF-SDK is a C++ Software Development Kit for glTF |
facebookincubator/FBX2glTF | A command-line tool for the conversion of 3D model assets on the FBX file format to the glTF file format. |
Texture Baking/Packing
Lib | Title |
---|---|
BinomialLLC/basis_universal | Basis Universal GPU Texture Codec |
caosdoar/Fornos | GPU Texture Baking Tool. A fast and simple tool to bake your high-poly mesh details to textures. |
kmkolasinski/AwesomeBump | AwesomeBump generate normal, height, specular or ambient occlusion textures from a single image |
dariomanesku/cmft | Cross-platform open-source command-line cubemap filtering tool |
Cheetah-Texture-Packer | High efficient and fast 2D bin packing tool |
thekla_atlas | Atlas Generation Tool |
libvips | A fast image processing library with low memory needs |
Frameworks
Lib | Title |
---|---|
GameFoundry/bsf | Modern C++14 library for the development of real-time graphical applications https://www.bsframework.io |
raylib | A simple and easy-to-use library to enjoy videogames programming http://www.raylib.com |
floooh/oryol | A small, portable and extensible C++ 3D coding framework |
ConfettiFX/The-Forge | The Forge Cross-Platform Rendering Framework PC, Linux, Ray Tracing, macOS / iOS, Android, XBOX, PS4 |
mosra/magnum | Lightweight and modular C++11/C++14 graphics middleware for games and data visualization |