~/ ~/documents ~/software ~/pictures github (opens in new tab)

A Fool’s Errand

Don’t build a game engine to make a game.

If you want to launch a product, existing tools are ready. Building your own is a massive time sink. But if the goal is to understand how computer systems, memory, graphics APIs, and operating systems interact, there is no better playground.

Writing an engine isn’t about making the game easier to build. It is about making the underlying systems transparent.

This series documents the development of Blossom: a custom 2D game engine built in Rust.

The Motivation

Modern software is built on layers of abstraction so thick the hardware is rarely visible. We call an API, and something happens. We import a library, and a window appears.

That is convenient, but it hides the underlying mechanics. The motivation for building an engine is to strip away those layers.

Understanding the Stack

Understanding exactly what happens between the operating system and the GPU:

Using an existing engine means accepting their solutions to these questions. Writing one means discovering them.

Solving Core Engine Problems

Every engine must solve a specific set of problems. Solving them from scratch teaches more about software architecture than building a dozen games.

Rust and Nix

A suckless engine demands an equally disciplined toolchain.

Constraining the Canvas

The fastest way to fail at building a game engine is to build too much.

Expanding scope is easy. Keeping a sharp, constrained focus is where the engineering discipline lies. If you try to build a general-purpose engine on day one, you will never write a line of code that draws to the screen.

The boundaries for Blossom are tight:

By limiting the canvas, we can focus on precision. We don’t need a kitchen-sink engine. We need a well-defined, highly optimized environment that solves our specific constraints.