Tombstone
osgOpenGEL
Dec 2003 โ Jan 2004 ยท age 21โ22
What it was
An "open game engine layer" meant to sit beside OpenSceneGraph, laid down in a single Sunday at the end of 2003. It was a Windows DLL exporting a handful of foundations: an intrusive reference-counted smart pointer, where each class decides how it dies; an error type that prepends file and line to its message every time it is rethrown; a motion interface with a parent, an update step and a pose; an entity that forwards updates to its motion and augments any error on the way out; and a reused math library of vectors, matrices and quaternions. Seven more headers named the intended architecture (entity groups, systems, transforms, organizers, a collision field) and contained nothing but a guard line. A console driver moved one entity once and printed a dot product. The driver was touched once more in January, and that was all.
Wins, for the age
- At twenty-one, Jeff built a hand-rolled stack trace: errors that accumulate a trail as they climb, finding on their own what Java's chained exceptions had already found a year earlier.
- Wrote intrusive counting where each object deletes itself, rediscovering the shape COM's AddRef and Release had made standard.
- Wrote the plan down first. Seven empty headers are a table of contents for an engine, the same instinct as writing interfaces before implementations.
- Made motion a composable interface with a parent, the seed of chained and blended animation. A small ape laying foundations on a Sunday, with ambition for a cathedral.
What it taught
- The mechanics of a Windows DLL, export macros, and what goes wrong when templates cross the boundary.
- Reference counting is simple to write and easy to get wrong: the pointer had no copy constructor, so a copy was counted once and released twice.
- Off-by-one allocations live in the first hundred lines of foundational code, which is exactly where tests matter most.
- Naming the modules is not building them, and building an engine from the smart pointer upward is the slowest route to a game.
Genealogy
Ancestors: none on record. Two of its pieces came from a course team project that autumn. Descendants: Adama Core: the plan-first habit, carried into a runtime that was actually finished.
Epitaph
Here lies osgOpenGEL: seven empty headers and a smart pointer, the outline of an engine drawn on the last Sunday of 2003.