API Design
Immediate-Mode Graphical User Interfaces (2005)
An old makeshift tech video I recorded introducing the concept of “IMGUI”  —  the Immediate-Mode Graphical User Interface.
Designing and Evaluating Reusable Components (2004)
An in-depth look at the five core principles of API design.
The Worst API Ever Made
A call-by-call look at context switch logging with the Event Tracing for Windows API.
Fixing Multi-monitor and Multi-window OpenGL on Windows
A simple proposal for a wgl extension that makes multi-monitor and multi-window output on Windows clean and simple.
Graphics Programming
Quaternions, Double-cover, and the Rest Pose Neighborhood (2006)
An old makeshift tech video I recorded about a special property of quaternions and how to use it to your advantage.
Implementing GJK (2006)
An old makeshift video I recorded about how to implement the GJK collision detection algorithm.
How to Open a Black Box (2007)
A look back at the development of normal mapping technology as a motivating example of why understanding concepts at a deep level is important for game engine programming.
Papers I Have Loved (2016)
A lecture from the 2016 Papers We Love conference about papers that proved inspirational to new work.
The Witness
Walk Monster
Mapping the walkable surfaces on the island of The Witness as a step toward bulletproofing the player movement code.
Finding and Fixing a Five-Second Stall
A strange pause in The Witness’s startup sequence leads to an investigation of Windows’ hotkey handling.
A Cliffside Cliffhanger
A little mystery about a rock that refused to move, that I thought I’d solved but didn’t really solve until Part 2.
How do you say “plane” in The Witness?
The exciting conclusion to the immovable rock mystery.
Visually pleasing distributions
An exploration of the grass system in The Witness leads to a discussion about what sorts of “random” distributions look pleasing to the human visual system.
The Color of Noise
What kinds of random distributions are good for the sorts of graphics work we do in game development?
The Nebraska Problem
The search for a “random” distribution with the most favorable qualities for ground cover.
A Brief Addendum on Staggered Concentric Intersection
Summaries and responses to emails received regarding the “Staggered Concentric Intersection” pattern.
Assorted grass system features
Brief discussions of some of the features of the grass system, and how they were implemented.
Interpolation
A video that introduces the basic concepts behind linear and bezier interpolation.
Semantic Compression
An introduction to the idea that code should be approached with a mindset towards compressing it semantically, rather than orienting it around objects.
Complexity and Granularity
An examination of two fundamental principles in effective programming.
Defining a Single Enumerant
An in-depth look at the decision-making process behind a small, simple piece of code.
Type Filtering
Implementing lister panel filtering by primary entity type.
Special Filters
Implementing lister panel filtering for arbitrary entity characteristics.
Displaying Groups Hierarchically
Making some simple changes to the lister panel code so that its display could show a hierarchy.
Lister Panel Demonstration
A brief video showing how the lister panel works in The Witness.
The Source Code
The complete source code to The Witness’s lister panel implementation.
Lister Panel Q&A
Questions and answers from last week’s post on The Witness’s lister panel.
Industry
The Next Twenty Years
Why the closed distribution model of Windows 8 should be changed for the sake of developers, consumers, and Microsoft itself.
Why Software Patents are Bad, Period.
An e-mail I wrote to a Stanford Law student a long time ago who asked me why programmers thought software patents were bad.
Miscellaneous
Are register names still useful?
Why do CPUs still take instruction streams encoded with register names?
Chronological
Immediate-Mode Graphical User Interfaces (2005)
An old makeshift tech video I recorded introducing the concept of “IMGUI”  —  the Immediate-Mode Graphical User Interface.
Quaternions, Double-cover, and the Rest Pose Neighborhood (2006)
An old makeshift tech video I recorded about a special property of quaternions and how to use it to your advantage.
Implementing GJK (2006)
An old makeshift video I recorded about how to implement the GJK collision detection algorithm.
The Next Twenty Years
Why the closed distribution model of Windows 8 should be changed for the sake of developers, consumers, and Microsoft itself.
Walk Monster
Mapping the walkable surfaces on the island of The Witness as a step toward bulletproofing the player movement code.
Finding and Fixing a Five-Second Stall
A strange pause in The Witness’s startup sequence leads to an investigation of Windows’ hotkey handling.
A Cliffside Cliffhanger
A little mystery about a rock that refused to move, that I thought I’d solved but didn’t really solve until Part 2.
How do you say “plane” in The Witness?
The exciting conclusion to the immovable rock mystery.
Visually pleasing distributions
An exploration of the grass system in The Witness leads to a discussion about what sorts of “random” distributions look pleasing to the human visual system.
The Color of Noise
What kinds of random distributions are good for the sorts of graphics work we do in game development?
The Nebraska Problem
The search for a “random” distribution with the most favorable qualities for ground cover.
A Brief Addendum on Staggered Concentric Intersection
Summaries and responses to emails received regarding the “Staggered Concentric Intersection” pattern.
Assorted grass system features
Brief discussions of some of the features of the grass system, and how they were implemented.
Interpolation
A video that introduces the basic concepts behind linear and bezier interpolation.
Semantic Compression
An introduction to the idea that code should be approached with a mindset towards compressing it semantically, rather than orienting it around objects.
Complexity and Granularity
An examination of two fundamental principles in effective programming.
Defining a Single Enumerant
An in-depth look at the decision-making process behind a small, simple piece of code.
Type Filtering
Implementing lister panel filtering by primary entity type.
Special Filters
Implementing lister panel filtering for arbitrary entity characteristics.
Displaying Groups Hierarchically
Making some simple changes to the lister panel code so that its display could show a hierarchy.
Lister Panel Demonstration
A brief video showing how the lister panel works in The Witness.
The Source Code
The complete source code to The Witness’s lister panel implementation.
Lister Panel Q&A
Questions and answers from last week’s post on The Witness’s lister panel.
Designing and Evaluating Reusable Components (2004)
An in-depth look at the five core principles of API design.
The Worst API Ever Made
A call-by-call look at context switch logging with the Event Tracing for Windows API.
Fixing Multi-monitor and Multi-window OpenGL on Windows
A simple proposal for a wgl extension that makes multi-monitor and multi-window output on Windows clean and simple.
Why Software Patents are Bad, Period.
An e-mail I wrote to a Stanford Law student a long time ago who asked me why programmers thought software patents were bad.
Are register names still useful?
Why do CPUs still take instruction streams encoded with register names?
How to Open a Black Box (2007)
A look back at the development of normal mapping technology as a motivating example of why understanding concepts at a deep level is important for game engine programming.
Papers I Have Loved (2016)
A lecture from the 2016 Papers We Love conference about papers that proved inspirational to new work.