Useful articles/resources we found useful during the development of Isetta
A special thanks to one of our readers Dylan for sending us this article!
- Game Engine Architecture 2nd edition - Chapter 4: 3D Math for Games
- Essential Mathematics for Games & Interactive Applications by James Van Verth & Lars Bishop
- Geometric Tools for Computer Graphics by Philip Schneider & David Eberly
- Gallery of Processor Cache Effects
- Scott Meyers - CPU Caches and Why You care
- Latency Numbers Every Programmer Should Know
Coarse Phase (Broad Phase)
Fine Phase & Others
- Gamasutra - Simple Intersection Tests for Games
- Correct Box Sphere Intersection
- StackExchange - Simple 3D OBB-Collision
- Separating Axis Theorem for OBB
- Randy Gual - Deriving OBB to OBB Intersection
- Capsule-Capsule Collision in Games
- gamedev.net - Capsule-Box Intersection
- Distance between 3D Lines & Segments
Config File (Engine Config)¶
- Create A Simple Configuration Parser
- Implementing a CVAR System
- C++11/14 How to parse a simple config file
- A Small Class to Read INI File
Data-Oriented vs Object-Oriented¶
- Entity Component Systems & Data Oriented Design (Aras Pranckevicius)
- CppCon 2014: Mike Acton "Data-Oriented Design and C++"
- CppCon 2015: Vittorio Romeo “Implementation of a component-based entity system in modern C++”
- Dice Introduction to Data-Oriented Design
- Stingray's Practical Examples in Data Oriented Design
- Data-Oriented Demo: SOA, composition Jonathan Blow
- Ring Buffers
- Everything about unordered_map
- unordered_map cppreference
- Data Structures in Games
- Game Engine Architecture 2nd edition - Chapter 5.3: Containers
- Why inheritance is viewed poorly
- Windows Walkthrough: Creating and Using a Dynamic Link Library
- Inline Functions with dllimport/dllexport
- Multiple Classes in DLL File
- How to export a DLL from Visual Studio 2017 C++ Project
- Windows with C++ - The Evolution of Threads and IO in Windows
- Microsoft Docs
- Multithreading Performance
- Understanding Async IO Operations
- Retained Mode Versus Immediate Mode
- Dear ImGui
- ImGui in 3D
- IMGUI for GameDev tools
- Why Qt and not IMGUI
- Game Engine Architecture 2nd edition - Chapter 22.214.171.124: Alignment and Packing
- Game Engine Architecture 2nd edition - Chapter 5.2: Memory Management
- Gamesutra - Writing a Game Engine from Scratch Part2: Memory: Also covers modern CPU memory access patterns.
- Are we out of memory?
- Randy Gaul's Game Programming Blog - Memory Management: "Anything that has a very clear and non-variable lifespan should be able to be allocated on a stack."
- IBM - Building your own memory manager for C/C++ projects: A step by step guide on implementing some allocators.
- ISO C++ FAQ: Is there a way to force new to allocate memory from a specific memory area?: Some discussion on placement
delete, and what you should know if you are going to manage object's lifetime on your own.
- GitHub - Memory Allocators Example
- Use the Memory Windows in the Visual Studio Debugger: The memory windows is very important when debugging memory allocators. You can see the memory layout byte by byte.
- Memory Patterns in Visual Studio: Another utility for debugging memory allocator. Visual Studio uses certain patterns to mark the state of memory chunks.
- C++ Casting, or: "Oh No, They Broke Malloc!": On different types of casts (
dynamic_cast, C-style casts) in C++ and when you should use them.
reinterpret_castis especially important as we will need to cast
uintptr_tto actual pointers a lot.
- When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?
- ISO C++ FAQ on Memory Management
- How does delete “know” the size of the operand array?
- Gaffer On Games - Game Networking
- The TRIBES Engine Networking Model or How to Make the Internet Rock for Multiplayer Games
- The DOOM III Network Architecture
- Multiplayer Game Programming
- Ch. 6, Network Topologies and Sample Games covers how to build out an application layer for your game networking
- UDP Sockets
Serialization / Reflection¶
- A C++ 11 Reflection and Serialization library on Github
- A practical guide to C++ Serialization (use Boost)
- Serialization and Unserialization (ISO C++)
- Boost Serialization (Requirements and Other Solutions)
- C++ Meta-Serialization
- s11n - Serialization Library
- Eternity - Serialization Library
- Cereal - Serialization Library
- Unreal Audio System Overview
- Demystifying Audio Middleware
- FMOD API Overview
- Game Engine Architecture 2nd edition - Chapter 13: Audio
- A StringID Library on Github
- Practical Hash IDs
- Minial perfect hashing for game assets
- Preprocessed strings for asset ids
- Hash Tables - Introduction
- In-house Engine Development: Process Tips
- String Interning - Useful Properties & Github Repo
- Fast C++ Logging Library
- Stanford CS101 - Bits and Bytes
- Microsoft Docs - Walkthrough: Create and use your own Dynamic Link Library (C++)
- LearnC++ — Overloading the comparison operators
- Cppreference - Array Initialization
- Cppreference - Priority Queue
- Cppreference - Parameter pack
- Cppreference - Constraints and concepts
- StackOverflow - Why is
inlinerequired on static inline variables?
- StackOverflow - How are C++11 lambdas represented and passed?
- Variadic Templates
- Eli Bendersky's Blog - Variadic templates in C++
- Bartek's coding blog - Factory With Self-Registering Types: We referenced this article we designing our level auto registration system.