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.