Reading

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.