Pre-3D Topics
Environment Setup
- CMake basics
- Dealing with paths - preprocessor vs working directory vs runtime directory, relative vs absolute
- Limiting symbols in global scope (everything is global by default)
- Debugging basics: embedding symbols, using breakpoints, watching variables, changing memory, etc
- Enabling useful compiler warnings
I/O, OS, code scope
- Generic types vs fixed-size types
- Manual memory management
- IO and type conversions:
<iostream>,std::getline,std::string/std::string_view,std::atoi, etc - Containers:
std::stringstream,std::vector,std::unordered_map,std::unordered_set,std::list,std::deque,std::bitset - Files:
<fstream>,std::filesystem - Random generation:
<random> - Function templates
Advanced C++
- Move semantics
- Customization points (operator overloading, custom iterators, etc)
<algorithm>(find,find_if,for_each,any_of,rotate,transform,iota)- Function objects (functors) and lambdas (immediate vs deferred, lifetime issues with captures)
<functional>, basic callback designstd::unique_ptr,std::shared_ptr,std::weak_ptr- Class templates
- Explicit specializations, SFINAE
- Static (compile time) polymorphism
- Performance optimizations
Game Fundamentals
- Measuring time
- Input state machines
- Lifetime-aware callbacks (“Delegates”)
- Numerical integration via
deltaTime - Linear interpolation
- Event loops / game loops
- Update method
- SFML, graphics best practices
3D
- Vectors: geometric interpretation, algebraic operations, multiplications
- Matrices: geometric interpretation, algebraic operations, multiplications, transformations, translations, rotations, scaling, etc
- Quaternions: geometric interpretation, algebraic operations, multiplications, interpolations, conversions to angles/matrices
- Cominbing matrix transformations
- Model View Matrix pipeline
- Simple problems in 3D space
- Native graphics APIs (OpenGL, DirectX, Vulkan)
- Depth buffers
- Shaders
