Reading
A small collection of books and websites that provide useful background for the tools and techniques used while building fireEngine.
Books
C++ Software Design
Klaus Iglberger’s guide to managing dependencies and software change in modern C++, using design principles and patterns to build flexible, maintainable systems without losing sight of practical trade-offs.
Foundations of Game Engine Development, Volume 1: Mathematics
Eric Lengyel’s focused treatment of vectors, matrices, transforms, geometry, and the mathematical conventions used to build game engines.
Game Engine Architecture
Jason Gregory’s broad guide to building game engines, including resource management, runtime architecture, rendering, animation, gameplay systems, and the engineering trade-offs that connect them.
Professional CMake
Widely regarded as the de facto guide to modern CMake, written by Craig Scott, one of CMake’s maintainers. It covers practical, target-based project structure, dependency management, testing, packaging, and cross-platform workflows.
Real-Time Rendering
The classic end-to-end reference for real-time rendering systems, connecting the graphics pipeline and hardware with transforms, shading, effects, optimisation, and acceleration techniques.
Refactoring
Martin Fowler’s guide to improving the design of existing code through small, behaviour-preserving transformations, supported by tests that keep each change safe and observable.
Vulkan Programming Guide
Written against an earlier version of Vulkan, but still a definitive, example-rich guide to the API’s core model, including queues, commands, memory, synchronization, and presentation.
Websites
C++ std::chrono::steady_clock
The cppreference entry for the monotonic clock used to measure elapsed frame time without being affected by changes to the system wall clock.
C++ std::expected
The cppreference language-library entry for the C++23 vocabulary type that represents either an expected value or a recoverable error without requiring an exception.
C++ std::ranges::upper_bound
The cppreference algorithms entry covering the ordered search used to find the first animation keyframe strictly after a playback time.
C++ subscript operator
The cppreference language reference for overloaded subscripting, including the multi-argument operator[] syntax added in C++23 and used by fireEngine’s matrix type.
C++ std::variant
The cppreference language-library entry for the type-safe discriminated union used to give a scene node one explicit component role.
Catch2 tutorial
The official introduction to Catch2, covering test cases, assertions, sections, behaviour-driven aliases, and data- and type-driven tests.
CTest FAIL_REGULAR_EXPRESSION
The CMake test property that turns matching standard output or standard error into a failed test independently of the executable’s exit code.
CTest RESOURCE_LOCK
The CMake test property for serialising tests that share one global resource, such as the Vulkan device used by fireEngine’s application scenarios.
GLFW documentation
The official guide to GLFW’s cross-platform window, input, event, and Vulkan surface APIs, including the lifetime and platform rules behind them.
glTF 2.0 specification: Animations
The Khronos definition of animation samplers, channels, target nodes and paths, input timestamps, output values, and supported interpolation modes.
glTF 2.0 specification: Buffers, Buffer Views, and Accessors
The Khronos definitions of binary storage, byte ranges, interleaved stride, typed accessors, and sparse data used when translating glTF geometry and animation samples.
glTF 2.0 specification: Meshes
The Khronos definitions of mesh primitives, topology, counter-clockwise winding, and the way mirrored node transforms reverse triangle facing.
glTF 2.0 specification: Scenes and Nodes
The Khronos definition of scenes, ordered root nodes, child hierarchies, and local transforms in glTF 2.0, providing a concrete interchange model for scene-graph ownership and traversal.
glTF 2.0 specification: Textures
The Khronos definitions of images, samplers, textures, and texture coordinates used to describe sampled surface colour.
fastgltf
The C++ glTF parsing library used behind fireEngine’s format-specific loading boundary, including helpers for traversing accessors without assuming packed buffer layouts.
Fix Your Timestep!
Glenn Fiedler’s explanation of fixed, variable, and semi-fixed simulation steps, and why elapsed-time policy matters as a real-time update loop grows.
How to Vulkan
A compact, code-first tutorial that builds a modern Vulkan 1.3 renderer while explaining how its major systems fit together.
Slang Sample reference
The Slang core-module reference for filtered texture sampling with an implicit level of detail, as used by fireEngine’s fragment shader.
vcpkg documentation
The official reference for the cross-platform C and C++ package manager used by the tutorial, covering manifests, registries, versioning, and CMake integration.
VkFrontFace reference
The Vulkan reference definition of clockwise and counter-clockwise front faces after projection into framebuffer coordinates.
VkCommandBufferInheritanceRenderingInfo reference
The Vulkan reference for the attachment formats, sample count, and view mask a secondary command buffer inherits when it executes inside dynamic rendering.
VK_KHR_swapchain_maintenance1 reference
The Vulkan extension reference for presentation fences, explicit image release, and other facilities that make swapchain lifetime and replacement easier to control.
VkSwapchainPresentFenceInfoKHR reference
The Vulkan reference for associating fences with presentation operations so an application can determine when related presentation resources may be safely recycled.
Vulkan Guide: Depth
The Khronos guide to depth formats, image aspects, layouts, fixed-function testing, comparisons, and attachment writes.
Vulkan Guide: Image Copies
The Khronos guide to copying between buffers and images, including subresource selection, tightly packed data, row length, image height, and copy extents.
Vulkan Guide: Swapchain Semaphore Reuse
The Khronos guide to indexing presentation wait semaphores by acquired swapchain image rather than frame slot, preventing unsafe binary-semaphore reuse.
Vulkan Guide: Synchronization Examples
Worked Synchronization 2 examples for image layout transitions, transfer operations, and making uploaded data visible to later shader reads.
Vulkan Validation Overview
The Khronos guide to Vulkan valid usage, VUIDs, undefined behaviour, and the development-time role of the validation layer.
Vulkan Memory Allocator
AMD’s open-source allocation library for Vulkan, with documentation and examples covering memory-type selection, suballocation, resource creation, and allocator configuration.
Vulkan specification: Fixed-Function Vertex Post-Processing
The normative path from clip coordinates through perspective division, clipping, and viewport transformation into rasterization.
Vulkan specification: Command Buffers
The normative definition of primary and secondary command buffers, recording, execution, inheritance, usage flags, and command-pool synchronization.
Vulkan specification: Push Descriptors
The normative definition of push-descriptor layouts and commands, including the lifetime of descriptor contents recorded directly into a command buffer.
Vulkan specification: Window System Integration
The normative definition of surfaces, swapchains, image acquisition, presentation, and the lifetime rules governing window-system resources.
Your first Slang shader
The official first step into Slang, covering HLSL-like shader source, entry points, command-line compilation, SPIR-V output, and cross-target code generation.