
Casey Muratori's Blog
npub1gh0s3zgt6n8vakpm76p2592u0hv34mmtdncgtg7egrvy238zzp2qwcwdp7@drss.io
Personal stuff.
Printing Presses Are Giant GPUs
28 Apr 2020
The more I learn about printing presses, the more they seem like giant GPUs.
Printing Presses Are Giant GPUs
28 Apr 2020

Jittering Fonts in Photoshop with Prime Pussify
18 Apr 2020

Jittering Fonts in Photoshop with Prime Pussify
18 Apr 2020
A Photoshop script for randomizing per-character font attributes on text layers.
Stable Filtering - Part 2
25 Mar 2019
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.
Stable Filtering - Part 2
25 Mar 2019

Stable Filtering - Part 1
5 Mar 2019

Stable Filtering - Part 1
5 Mar 2019
How to make a filter that can be applied millions of times without producing artifacts.
How to get clang++ to find link.exe
23 Jan 2019

How to get clang++ to find link.exe
23 Jan 2019
As of version 8.0.0, clang on Windows requires some gyrations if you want to tell it where link.exe is located.
How close is WinDBG Preview to an everyday debugger?
9 Jan 2019

How close is WinDBG Preview to an everyday debugger?
9 Jan 2019
A look at what Microsoft has been doing to improve the usability of WinDBG, and what's still missing.
Killing the Walk Monster (2018)
11 Oct 2018

Killing the Walk Monster (2018)
11 Oct 2018
My BICFest 2018 lecture overview of the movement system I developed for The Witness.
The Thirty-Million-Line Problem (2015)
21 May 2018

The Thirty-Million-Line Problem (2015)
21 May 2018
A lecture from 2015 that argues for moving away from drivers and toward ISAs.
Papers I Have Loved (2016)
5 Feb 2018

How to Open a Black Box (2007)
5 Feb 2018

Papers I Have Loved (2016)
5 Feb 2018
A lecture from the 2016 Papers We Love conference about papers that proved inspirational to new work.
How to Open a Black Box (2007)
5 Feb 2018
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.
Are register names still useful?
18 Dec 2016
Why do CPUs still take instruction streams encoded with register names?
Are register names still useful?
18 Dec 2016

Why Software Patents are Bad, Period.
24 Aug 2016

Why Software Patents are Bad, Period.
24 Aug 2016
An e-mail I wrote to a Stanford Law student a long time ago who asked me why programmers thought software patents were bad.
Implementing GJK (2006)
12 May 2016
An old makeshift video I recorded about how to implement the GJK collision detection algorithm.
Immediate-Mode Graphical User Interfaces (2005)
12 May 2016
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)
12 May 2016
An old makeshift tech video I recorded about a special property of quaternions and how to use it to your advantage.
Fixing Multi-monitor and Multi-window OpenGL on Windows
6 Feb 2016
A simple proposal for a wgl extension that makes multi-monitor and multi-window output on Windows clean and simple.
The Worst API Ever Made
6 Aug 2014
A call-by-call look at context switch logging with the Event Tracing for Windows API.
Designing and Evaluating Reusable Components (2004)
30 Jul 2014
An in-depth look at the five core principles of API design.
Lister Panel Q&A
23 Jul 2014
Questions and answers from last week's post on The Witness's lister panel.
The Source Code
16 Jul 2014
The complete source code to The Witness's lister panel implementation.
Lister Panel Demonstration
9 Jul 2014
A brief video showing how the lister panel works in The Witness.
Displaying Groups Hierarchically
2 Jul 2014
Making some simple changes to the lister panel code so that its display could show a hierarchy.
Special Filters
25 Jun 2014
Implementing lister panel filtering for arbitrary entity characteristics.
Type Filtering
18 Jun 2014
Implementing lister panel filtering by primary entity type.
Defining a Single Enumerant
11 Jun 2014
An in-depth look at the decision-making process behind a small, simple piece of code.
Complexity and Granularity
4 Jun 2014
An examination of two fundamental principles in effective programming.
Semantic Compression
28 May 2014
An introduction to the idea that code should be approached with a mindset towards compressing it semantically, rather than orienting it around objects.
The Color of Noise
23 May 2014
What kinds of random distributions are good for the sorts of graphics work we do in game development?
Interpolation
21 May 2014
A video that introduces the basic concepts behind linear and bezier interpolation.
Visually pleasing distributions
16 May 2014
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.
Assorted grass system features
14 May 2014
Brief discussions of some of the features of the grass system, and how they were implemented.
A Brief Addendum on Staggered Concentric Intersection
7 May 2014
Summaries and responses to emails received regarding the "Staggered Concentric Intersection" pattern.
The Nebraska Problem
2 May 2014
The search for a "random" distribution with the most favorable qualities for ground cover.
How do you say "plane" in The Witness?
20 Jan 2013
The exciting conclusion to the immovable rock mystery.
A Cliffside Cliffhanger
24 Dec 2012
A little mystery about a rock that refused to move, that I thought I'd solved but didn't really solve until Part 2.
Finding and Fixing a Five-Second Stall
17 Dec 2012
A strange pause in The Witness's startup sequence leads to an investigation of Windows' hotkey handling.
Walk Monster
12 Dec 2012
Mapping the walkable surfaces on the island of The Witness as a step toward bulletproofing the player movement code.
The Next Twenty Years
8 Oct 2012
Why the closed distribution model of Windows 8 should be changed for the sake of developers, consumers, and Microsoft itself.