Awesome
BUas Game Programming awesome list
A curated list of useful tools, libraries, resources all around the topic of game development / game programming for the Games course at Breda University of Applied Sciences.
Content
Tools
- Jenkins - Easy to install CI and CD solution.
- GitHub Actions GitHub CI and CD
- Resharper Support you with your work in Visual Studio (Student licence available)
- Visual Assist Improvements to Visual Studio like Resharper. (Student licence available)
- VS Code
- Premake Simple LUA based powerfully simple build configuration tool.
- CMake Powerfull Meta Build System, to build build systems
- Clang
- Use Clang in Visual Studios
- Clang Tooling Different parts of clang explanation/starting page
- ClangFormt fromat your code
- ClangCheck check your code
- AddressSanitizer check for memory issues
- Devkitpro Retro Game Dev
- VLD Visual Leak Detector
- Tiled Map Editor A flexible level editor 2D tiled map
- Rust Analyzer rust-analyzer is an experimental modular compiler frontend for the Rust language.
- RenderDoc Render Debugger
- Where is my Draw Addon for RenderDoc
- NVIDIA® Nsight™ Graphics is a standalone developer tool that enables you to debug, profile, and export frames built with Direct3D (11, 12, DXR), Vulkan (1.2, NV Vulkan Ray Tracing Extension), OpenGL, OpenVR, and the Oculus SDK.
- Rider for UE4 Visual Studio alternative for UE4 with useful functionality like built-in visual assist features and showing where classes are implemented in blueprints.
- MTuner is a C/C++ memory profiler and memory leak finder for Windows, PlayStation 4 and 3, Android and other platforms
- optick C++ Profiler For Games
- Agones Host, Run and Scale dedicated game servers on Kubernetes
- Circle Language The C++ Automation Language, C++17 with meta (reflection) and Shader support (C++ in shaders)
- DDS dds - A Build System and Library Manager
- Mantis Bug Tracker (PHP)
- evoke Magical Build System
Libraries & Frameworks:
Graphics
C / C++
- Dear IMGUI the immediate mode GUI
- sokol Simple STB-style cross-platform libraries for C and C++, written in C.
- bgfx (Bring Your Own Engine/Framework) Cross-platform, graphics API agnostic, "Bring Your Own Engine/Framework" style rendering library.
- stb
- stb_image.h image loader
- stb_image_write.h image writer
- stb_image_resize.h image resizer
- stb_truetype.h font text rasterizer
- DirectXShaderCompiler This repo hosts the source for the DirectX Shader Compiler which is based on LLVM/Clang.
- Assimp The official Open-Asset-Importer-Library Repository. Loads 40+ 3D-file-formats into one unified and clean data structure.
- DiligentEngine A modern cross-platform low-level graphics library and rendering framework
- Vulkan Memory Allocator Easy to integrate Vulkan memory allocation library
- Directx12 Memory Allocator Easy to integrate directx12 memory allocation library, from the creators of Vulkan Memory Allocator.
- FidelityFX Optimized shader-based features aimed at improving rendering quality and performance.
rust
- rust-gpu - Making Rust a first-class language and ecosystem for GPU code
- egui - egui: an easy-to-use immediate mode GUI in pure Rust
- gpu-allocator - Memory allocator written in Rust for Vulkan and DX12
- rspirv-reflect - SPIR-V reflection library written in Rust
- hassle-rs - Rust bindings for the DirectXShaderCompiler library
- blue-noise-sampler - Low-Discrepancy Sampler that distributes Monte Carlo errors as a blue noise in screen space.
- ash - Vulkan bindings for rust
- windows-rs - Windows bindings for rust
ECS
C / C++
- EnTT - Gaming meets modern C++ - a fast and reliable entity component system (ECS) and much more
- flecs -A fast entity component system (ECS) for C & C++
- EntityX
rust
C#
- Unity's DOTS
- Svelto.ECS - Svelto ECS C# Lightweight Data Oriented Entity Component System Framework
- Entitas-CSharp -Entitas is a super fast Entity Component System (ECS) Framework specifically made for C# and Unity
Scripting Languages
- wren - minimal scripting language OOP
- lua
- Sol2 Lua binding Sol3 (sol2 v3.0) - a C++ <-> Lua API wrapper with advanced features and top notch performance
- ChaiScript
C Interface languages
- rust
- zig Zig is a general-purpose programming language and toolchain for maintaining robust, optimal, and reusable software. Can bind to C / C++
- vlang Simple, fast, safe, compiled. For developing maintainable software. Can compile to c
- Odin
Math
C++
- DirectXMath
- glm OpenGL Mathematics (GLM)
- eigen Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms. http://eigen.tuxfamily.org/
- google/mathfu C++ math library developed primarily for games focused on simplicity and efficiency.
JSON, XML
C++
- PugiXML Light-weight, simple and fast XML parser for C++ with XPath support
- JsonCpp A C++ library for interacting with JSON.
- tmxlite lightweight C++14 parser for Tiled tmx files
- nlohmann/json JSON for Modern C++ (not very fast but simple)
- rapidjson fast but complicated JSON lib
Physic
C++
- Box2D A 2D Physics Engine for Games
- PhysX NVIDIA PhysX SDK
- projectchrono An Open Source Multi-physics Simulation Engine
- ReactPhysics3D C++ physics engine library for 3D simulations and games
AI
nothing yet
Networking
C/C++
- ValveSoftware/GameNetworkingSockets Reliable & unreliable messages over UDP. Robust message fragmentation & reassembly. Encryption.
- ENet ENet's purpose is to provide a relatively thin, simple and robust network communication layer on top of UDP (User Datagram Protocol).The primary feature it provides is optional reliable, in-order delivery of packets.
- Message oriented networking library using TCP transport.
- librg Single-header cross-platform world replication in pure C99.
rust
- libpnet/libpnet — A cross-platform, low level networking
- smoltcp-rs/smoltcp — A standalone, event-driven TCP/IP stack that is designed for bare-metal, real-time systems
- tokio-rs/tokio — A network application framework for rapid development and highly scalable production deployments of clients and servers.
- dylanmckay/protocol — Custom TCP/UDP protocol definitions
- actix/actix — Actor library for Rust
Other
- Libclang for Python Much simpeler python api
C# / Unity
C / C++
- fmod proprietary audio lib
- Portaudio PortAudio is a free, cross-platform, open-source, audio I/O library.
- OpenAL OpenAL is a cross-platform three-dimensional audio API.
- Asio Asio is a cross-platform C++ library for network and low-level I/O programming that provides developers with a consistent asynchronous model using a modern C++ approach.
- stb stb single-file public domain libraries for C/C++
- cereal A C++11 library for serialization
- Rttr C++ Reflection Library
- spdlog Fast C++ logging library.
- copperspice Like QT but OpenSource, GUI library
- SFML Simple and Fast Multimedia Library, Easy for quick prototyping
- Steamworks SDK
- STX C++17 & C++ 20 error-handling and utility extensions
- C++ frame profiler C++ frame profiler
- Scope Guard & Defer C++
- fmt A modern formatting library
- quill Asynchronous Low Latency C++ Logging Library
- rocket rocket - Fast single header signal/slots library for C++
- cxxopts Lightweight C++ command line option parser
- cgltf Single-file glTF 2.0 loader and writer written in C99
- tinygltf Header only C++11 tiny glTF 2.0 library
C++ Common Libs
- EASTL Electronic Arts Standard Template Library. It is an extensive and robust implementation that has an emphasis on high performance.
- abseil Googles C++ STD extensions (fast hasmaps)
- folly Facebook's C++ STD extensions (fast hashmaps)
- Guidelines Support Library The Guidelines Support Library (GSL) contains functions and types that are suggested for use by the C++ Core Guidelines maintained by the Standard C++ Foundation. This repo contains Microsoft's implementation of GSL. (C++14)
- eventpp Event Dispatcher and callback list for C++
- cli A library for interactive command line interfaces in modern C++
Web Technolgy
- BabylonJS -About Babylon.js is a powerful, beautiful, simple, and open game and rendering engine packed into a friendly JavaScript framework.
- ThreeJS - JavaScript 3D library.
Engines Plugins
Unreal Engine Plugins
Unity Plugins
Resources
Videos
AI
- Winding Road Ahead: Designing Utility AI with Curvature Tools: Debugging, Designing etc with Curvature
Graphics
- Introduction to Computer Graphics Introduction to Computer Graphics. School of Computing, University of Utah.
- Computer Graphics (CMU 15-462/662) Lecture videos for the introductory Computer Graphics class at Carnegie Mellon University.
C++
- Cᐩᐩ Weekly With Jason Turner C++ Weeklies
- CppCon Biggest C++ Conference
- Meeting C++ Biggest C++ Conference in Europe (Berlin) (Take students as volunteers)
- Cpp Now
- CopperSpice Move Semantics, Multi Threading, C++17, Templates, Modern C++
- Building a C++ Reflection System in One Weekend Using Clang and LLVM - Arvid Gerstmann
- CppCon 2018: Jonathan Boccara “105 STL Algorithms in Less Than an Hour”
Game Dev
- GDC
- GDC Vault
- Adopting Continuous Delivery (In Sea of Thieves) - GDC talk QA CI/CD
- Horizon Zero Dawn: A QA Open World Case Study - GDC talk QA CI/CD
- https://www.youtube.com/watch?v=SHinxAhv1ZE GDC
- Math for Game Programmers: Fast and Funky 1D Nonlinear Transformations GDC
- Build Great Tools: Workflow Guidelines from Vicarious Visions GDC - UI / UX For tools programming
Data Oriented Design
- Overwatch Gameplay Architecture and Netcode (Blizzard, GDC)
- Data-Oriented Design and C++ (Mike Acton, CppCon)
- CPU caches and why you care (Scott Meyers, NDC)
- Culling the Battlefield: Data Oriented Design in Practice (DICE, GDC)
- Game Engine Entity/Object systems (Bobby Anguelov, presentation)
- Understanding Data Oriented Design for Entity Component Systems (Unity, GDC)
Network
- Physics for Game Programmers : Networking for Physics Programmers (Glenn Fiedler)
- Networking in C++ Part #1: MMO Client/Server, ASIO & Framework Basics
- Overwatch Gameplay Architecture and Netcode
- World of Warcraft's Network Serialization and Routing
- I Shot You First: Networking the Gameplay of Halo: Reach
- Move fast and don't break things: High-performance networking in Rust — Joshua Liebow-Feeser
CMake
- Modern Cmake: An introduction
- CppCon 2017: Mathieu Ropert “Using Modern CMake Patterns to Enforce a Good Modular Design”
- C++Now 2017: Daniel Pfeifer “Effective CMake"
Computer Siences
- MIT 6.006 Introduction to Algorithms
- So you want to write an interpreter?
- How to Build a Virtual Machine
Others
Books
- Ray tracing in a weekend
- Data-Oriented Design Book (In BUas Lib)
- Open Data Structures
- Mazes for programmers
- Raytracing Gems
- Real-Time Rendering (In BUas Lib)
- Calculus Volume 1
- Mastering C++ Multithreading
- Network Programming with Rust
- Multiplayer Game Programming: Architecting Networked Games (In BUas Lib)
- The Fundamentals of C/C++ Game Programming: Using Target-based Development on SBC's If you work on the Raspberry pi
- Foundations of Game Engine Development Book Series
- Effective Modern C++ by Scott Meyers Covers Modern C++ 11,14,17 Topics: e.g., auto type declarations, move semantics, lambda expressions, and concurrency support, template
Articles / Papers
Graphics
- Moving Frostbite to Physically Based Rendering 3.0
- Advances in Real-Time Rendering in 3D Graphics and Games SIGGRAPH courses slides
- Real-Time Physically Based Rendering and BRDFs
- Linear Interpolation
- Pixels? Triangles? What’s the difference? — How (I think) Nanite renderes a demo with 10¹¹ tris
- Vulkan Shader Resource Binding
- Tutorials and Documents by Anders Lindqvist
- Publications by Peter-Pike Sloan
- Advanced Shader Programming on GCN
Data Oriented Design
- ECS Faq - Frequently asked questions about Entity Component Systems
- Understanding Data Oriented Design (Unity, Tutorial)
- Entities, Components and Systems (Mark Jordan, blog)
- Why Vanilla ECS is not enough (Sander Mertens, blog)
- Formalisation of Concepts behind ECS and Entitas (Maxim Zaks, blog)
- Entity Component System and Rendering (Our Machinery, blog)
- Specs and Legion, two very different approaches to ECS (Cora Sherrat, blog)
- Archetypes and Vectorization (Sander Mertens, blog)
- ECS back & forth (Michele Caini, blog series)
Algorithms, Data Structures
- Sparse Set (Geeks for Geeks)
- Hibitset (DOCS.RS)
- Perlin Noise Understanding Perlin Noise
- Perlin Noise khanacademy article
- The Wavefunction Collapse Algorithm explained very clearly
- Open-sourcing F14 for faster, more memory-efficient hash tables
- CPU Caches and Why You Care Scott Meyers
Physics
- Physics Info
- Visualizing the GJK Collision detection algorithm
- realtimerendering: intersections
- Geometrics
Networking & Enycription
- Security analysis of DTLS 1.2 implementations
- 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond Lockstep
- Lockstep multiplayer first steps
Others
- HOW TO IMPLEMENT A NODE-BASED SCRIPTING LANGUAGE Good overview of the foundation
- Let’s Build A Simple Interpreter. Part 1. Can be adpoted to C/C++
- craftinginterpreters
- Write your Own Virtual Machine for LC3 Assembly
- Getting started Libclang
- retro game dev gba tutorialsAnd the best gba tutorials ever if peopel are really enthusiastic
- AddressSanitizer for Windows: x64 and Debug Build Support
- Bit-level operations – bit flags and bit masks
- Multithreading - C++17 and C++20 Collection of Articles, General Puprose not specific game dev
- Multithreading - Memory Model Collection of Articles, General Puprose not specific game dev
- Multithreading - Applications Collection of Articles, General Puprose not specific game dev
- How to debug in rust with VS Code
- Using Git Sparse Checkout
- How C++ Resolves a Function Call
- shafik/cpp_learning Where to get started learning C++ and what resources are there.
Websites, Blogs, Webtools
Algorithms, Data Structures
- Red Blob Games hex grid, A*, grids, graphs
- Maze Generation Serires
C++
- Fluent C++
- C++ Core Guidelines
- Cpp Cast a C++ Podcast
- Modern C++ A blog full of good sources
- Over 700 videos of talks, tutorials and explanations related to C++
Rust
- rust book Learn rust
- Rust in a Week Learn rust in a week
- Rust Times News, Jobs, Articles
- Crates Rust Packes search online
Graphics
- Ray tracing in a weekend - website
- 3D Game Engine Programming Direct X 12
- Learning DirectX12 GitRepo
- Graphics Programming Weekly over 150 posts about Graphics Programming
- Vulkan Diagrams Diagrams showing relationships between Vulkan objects and how they're used.
- learnopengl.com A great place to start learning OpenGL
- opengl-tutorial.org A great collection of OpenGL Tutorials
- Scratchapixel 2.0 Learn Computer Graphics From Scratch!
- vulkan-tutorial.com - A collection of vulkan tutorials
- VulkanGuide - The focus of this guide is to understand Vulkan correctly, and act as a stepping stone for then working in your own projects
- Vulkan for HLSL How to use HLSL for Vulkan Shaders when compiling HLSL to SPIR-V using DirectXShaderCompiler.
- Using the DirectXShaderCompiler API explains how to use the DirectXShaderCompiler API in your application. Uses the new IDxcUtils interface instead of IDxcLibrary
- tellusim engine blog - cool GPU driven blog posts: Blue noise, benchmarks between GPU's, Raytracing, Animations etc.
- The Danger Zone Blog of Matt Pettineo (Lead graphics and engine programmer at Ready At Dawn Studios) such as Vulkan, Directx11/12 and opengl.
- Alain Galvan blogs Blog of Alain Galvan, graphics driver engineer for AMD.
- Raw Directx12 Basics on the raw initialization of Directx12 without any helper libraries.
- Raw WebGPU Basics on the raw initialization of WebGPU.
- Raw Vulkan Basics on the raw initialization of Vulkan.
- Comparison of Modern Graphics API's Goes on the basics, and differences on old and newer graphic API's
Web tools
- Compiler Explorer - lets you compile many different languages such as C,C++ or rust and inspect the Assembly or test
- CPP Insights - Shows you what the compiler does with your C++ code. How does a for each loop looks to the compiler?
- Quick Benchmarks Quick benchmarks online
- Quick Builld Check build times of your code
- Shader Toy Play with shaders in the browser
- Shader Playground - lets you compile HLSL with different compilers and inspect the intermediate format
Others
- gafferongames All around Network programming
- Openstax Free High quality Textbooks
Courses
- Jenkins Essential Training (linkedin)
- Programming Natural-Simulations In JavaScript but can be transferd to C/C++, rust , C#
- Trigonometry - khanacademy
- Geometry - khanacademy
- Precalculus - khanacademy
- Linear-Algebra - khanacademy
- Calculus AB - khanacademy
- Calculus BC - khanacademy
- Refresher Physics khanacademy
- Physics 1 khanacademy
- Network Programming with Rust: The Course Overview | packtpub.com
Other (Awesome) lists
- Memory Managment
- Magic Tools - A Game Programming list
- Unity List
- Game Talks
- Awesome Entity Component System (Jeongseok Lee, link collection)
- C++ Links a link collection by MattPD
- Memory Performance Tools a list by MattPD
- Atomics, lock free, memory model a list by MattPD
- Cache a list by MattPD
- Prefetch a list by MattPD
- Memory Bus a list by MattPD
- gamedev libraries collection of C / C++ libs for game devs
- Awesome CMake A curated list of awesome CMake resources, scripts, modules and examples.
- The Aggregate
- shafik/cpp_youtube_channels Listing of C++ Youtube channels for conferences and user groups
- shafik/cpp_blogs C++ Blogs (plus other stuff we should care about like undefined behavior)