December 2008 to present.
Tungsten Graphics, Inc., October 2001 to December 2008. Acquired by VMware.
VA Linux Systems, Inc.,
April 2000 - September 2001.
Precision Insight, Inc., October 1999 to April 2000 (until aquired by VA Linux)
Avid Technology, Inc., September 1996 to September 1999.
Silicon Graphics, Summer 1996
Space Science and Engineering Center,
University of Wisconsin - Madison,
January 1991 to September 1996.
Steamboat Springs, Colorado, USA.
A.k.a. "Ski Town USA" (a pretty
good place for mountain biking too!)
Master's Degree, Computer Science,
University of Wisconsin - Madison, 1994
Bachelor's Degree, Computer Science,
University of Wisconsin - Oshkosh, 1990
High School, Stratford High School, Stratford, WI, 1986
Software I've written or contributed to:
- Mesa - a free OpenGL work-alike library
(plus, the new Gallium3D infrastructure)
- VMware Workstation, Fusion, ESX products
Chromium - contributor to the Chromium project
- DRI - contributor to the Direct
Rendering Infrastructure in XFree86
- VNC Proxy / Renderserver - remote
3D graphics over VNC
- Blockbuster - a high-res movie
player for scientific visualization applications.
- Glean - contributor to Allen Akin's
Glean (OpenGL validation) project
- Togl - an OpenGL widget for Tcl/Tk,
with Ben Bederson
- Vis5D -
visualization system, with Bill Hibbard
- TR - tile rendering library for OpenGL
- V-Blocks -
virtual building blocks (very old, requires IRIS GL)
- Avid Marquee - 3D text, graphics, video animation
Other stuff I've done:
- OpenGL ideas - a random collection of ideas
for new OpenGL features.
- OpenGL ARB - I've been involved in
the OpenGL ARB for several years now and have contributed to a number of
efforts including OpenGL 1.3, 1.4, 1.5, 2.0 and many extensions.
- Course notes
for "OpenGL and Window System Integration" course at SIGGRAPH '97
Graphics Computers I've Used:
- Radio Shack TRS-80 Model 3/4 - 1982 to 1986
48KB RAM, 1MHz Z80, 180KB floppy disk, TRS-DOS, 128x48 monochrome display.
This was my very first computer in high school.
I taught myself BASIC and Pascal on this system.
One TRS-80 in the school lab had the high-res graphics option (640x240).
I wrote a simple drawing program for it in BASIC.
- Apple II+ - 1984 to 1986
48KB RAM, 1 MHz 6502, two floppy drives, monochrome display.
I wrote a CNC milling machine simulator for this computer, among other things.
- Atari 800XL - 1983 to 1985
64KB RAM, 1.7 MHz 6502, cassette tape storage,
up to 320x192 pixels monochrome, more colors at lower resolutions.
256 colors max.
This was my first home computer.
Did lots of graphics programming with the Action! language (without floating
- Atari 130XE - 1985 to 1987
128KB RAM, 1.7 MHz 6502, 180KB floppy disk.
I wrote my first ray-tracer, triangle renderer and 3-D modelling software
on this system in BASIC while in college.
A 10-frame, 160x192 pixel, ray-traced animation took two days to render!
- Amiga 500 - 1987 to 1991
1MB RAM, 7.8 MHz 68000, two 800KB floppy disks,
up to 640x400 display, 4096-color palette.
I wrote various ray tracers and scan-line rasterizers on this system in
- Pixar Image Computer 2 - 1989 to 1990
1280x1024x36-bit display. Sun 3/150 front-end: 16MHz 68020, 16MB RAM,
80MB disk, monochome display.
For my senior computer science project in college I wrote a 3-D modeller
for this system in C. It generated scene files which were rendered with
ChapReyes, the predecessor to Renderman.
- Sun SPARCstation 2 - 1989 to 1990
The computer science department got a few of these workstations during
my senior year of college. I typed in a ray tracer from a program listing
in a magazine and rigged up a display system that converted the 24-bit
image files to an 8-bit form suitable for the SPARCstation display.
- Stardent GS2000 (aka Stellar ST2000) - 1991 to 1994
4-stream CPU, 20 MIPS, 80 MFLOPS vector processor, 64MB RAM,
three 60MB hard disks,
1280x1024x24-bit display, 120Ktri/sec, XFDI graphics library (C/Fortran).
I primarily helped develop Vis5D on this system.
- Amiga 3000 - 1991 to 1995
3MB RAM, 16 MHz 68030, 10MB disk.
The first bits of Mesa were written on this computer.
Used HAM mode to approximate a normal RGB (non-indexed) framebuffer.
- SGI 340VGX - 1992 to 1995
4x33MHz MIPS R3000, 64MB RAM, 1280x1024x24-bit display 1M shaded tri/sec.
Helped develop Vis5D and VisAD on this system using IRIS GL.
A really fantastic system for its day.
Also, wrote a subset Ada compiler for this system when in graduate school.
It generated real MIPS code.
- Assorted workstations - 1992 to 1997
At the SSEC I programmed various graphics workstations from IBM, Sun,
HP and DEC using X, IRIS GL, PEX, Starbase, etc.
Nowadays it's all PCs. Back then there was a lot more variety in
computers and I liked that. Each new system was a new adventure.
- Pentium PC - 1995 to 1998
100MHz, 16MB RAM, 1GB disk, 1024x768x8-bit Cirrus Logic graphics card.
This was the first PC I bought for myself (around $2500 IIRC).
- SGI Onyx Reality Engine 2 - 1995 to 1997
4x150MHz MIPS R4400, 128MB RAM, 1280x1024x24-bit display 1.8M textured tri/sec
Another really great SGI system.
- SGI (assorted) - 1994 to 1999
Indigo, Indigo2, O2, Indy, Crimson, Infinite Reality, etc.
I did a lot of IRIS GL and OpenGL programming on these systems.
- Generic PCs - 1999 to today
Various intel CPUs from 100Mhz to multi GHz. 512MB to GBs of RAM.
Multi-gigabytes of disk space. 1024x768x8-bit displays or better.
Assorted consumer and pro graphics cards.
- More PCs - circa 2011
8-core Intel CPU, 12GB RAM, 3TB disk, dual 1920x1200 displays,
NVIDIA GTX-280 graphics card.
Other Unusual or Old Computers I've Used and Programmed:
Some of the systems mentioned above are kind of old and rare.
Here's a few more:
- PDP-11 - 1988-1990
The UW Oshkosh was still operating a PDP-11 (or some variant) back then.
It was used for the "Unix" classes. Most of the terminals were VT-220
(text-only) displays but there was one graphics display that supported
1024x768 by 4 (or 16?) colors. For my graphics class I implemented a
rasterizer that used Warnock's algorithm for hidden surface removal
(no Z buffer) which used that graphics terminal.
- Cromemco - Summer 1989
While still in high-school I took a college-level summer class in computer
programming at the local branch of the UW system. We learned Pascal
programming (though I had already used Pascal in high school) on some
kind of Cromemco system. It was a basically a minicomputer with about a
dozen text terminals.
- Cray 2, Cray X-MP, Cray Y-MP - Early 1990s
I did some
visualization-related work on Cray systems while I worked at the SSEC.
The Crays were located at the NCSA and other sites. Distributed Vis5D
used a Cray for data set hosting and isosurface construction.
Isosurfaces were sent by network to an SGI workstation where they were
rendered. The Crays ran the batch-oriented Unicos OS. Despite being
the "fastest" computers around, they were pretty pokey when using the
- Thinking Machines CM-5 - Early 1990s
The University of Wisconsin
computer science department had a CM-5 in the early 1990s. I briefly
used the machine to do some experiments with distributed
visualization, like the Cray systems. To take advantage of the CM-5
vector processors you had to program in Fortran or a variant of C
called C* (C-star). It used a weird array prefix notation for
parallel/vectorizable arrays. Ex: float x = [i][j]array;
- Intel Touchstone Delta - Early 1990s
I briefly used this machine during
graduate school. I wrote/ported a simple parallel ray tracer to this
- X Terminals - 1991 to 1995
X Terminals were a step up from text terminals. They simply ran an X
server which received X protocol from apps running on other hosts.
They were an inexpensive way to let several people share an expensive
workstation. I especially liked the 21" 1280x1024 monochrome terminal that
I used for a while at the SSEC. The black and white display was great for
developing code. I implemented monochrome X visual support in Mesa so that
I could display OpenGL on that terminal. The pinnacle of that was running
SGI's Performer Town demo in dithered black and white on that screen.
- Sony/IBM Cell processor - 2007 to 2008
Not rare or old, but not too many people have programmed the Cell directly.
I wrote most of the Mesa/gallium
"cell" driver. Fragment shaders were translated into SPU machine
code. Triangle rasterization, texture sampling, blending and depth
testing were also performed with SPU code. Until the llvmpipe driver
came about, it was the fastest Mesa/gallium software rasterizer in
terms of fragment processing speed.
Last updated 18 March 2012.