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. |
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. |
Stable Filtering — Part 1 |
How to make a filter that can be applied millions of times without producing artifacts. |
Stable Filtering — Part 2 |
How to make a filter than can be implied an infinite number of times without producing artifacts and remain nearly indistinguishable from the original image. |
Printing Presses Are Giant GPUs |
The more I learn about printing presses, the more they seem like giant GPUs. |
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. |
Killing the Walk Monster (2018) |
My BICFest 2018 lecture overview of the movement system I developed for The Witness. |
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. |
How close is WinDBG Preview to an everyday debugger? |
A look at what Microsoft has been doing to improve the usability of WinDBG, and what’s still missing. |
How to get clang++ to find link.exe |
As of version 8.0.0, clang on Windows requires some gyrations if you want to tell it where link.exe is located. |
Jittering Fonts in Photoshop with Prime Pussify |
A Photoshop script for randomizing per-character font attributes on text layers. |
Are register names still useful? |
Why do CPUs still take instruction streams encoded with register names? |
The Thirty-Million-Line Problem (2015) |
A lecture from 2015 that argues for moving away from drivers and toward ISAs. |
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. |
The Thirty-Million-Line Problem (2015) |
A lecture from 2015 that argues for moving away from drivers and toward ISAs. |
Killing the Walk Monster (2018) |
My BICFest 2018 lecture overview of the movement system I developed for The Witness. |
How close is WinDBG Preview to an everyday debugger? |
A look at what Microsoft has been doing to improve the usability of WinDBG, and what’s still missing. |
How to get clang++ to find link.exe |
As of version 8.0.0, clang on Windows requires some gyrations if you want to tell it where link.exe is located. |
Stable Filtering — Part 1 |
How to make a filter that can be applied millions of times without producing artifacts. |
Stable Filtering — Part 2 |
How to make a filter than can be implied an infinite number of times without producing artifacts and remain nearly indistinguishable from the original image. |
Jittering Fonts in Photoshop with Prime Pussify |
A Photoshop script for randomizing per-character font attributes on text layers. |
Printing Presses Are Giant GPUs |
The more I learn about printing presses, the more they seem like giant GPUs. |