SGI demos from long ago, running in your browser today.
It's a UNIX system. I know this!
This is the original SGI demo source code, compiled for the web using Emscripten and SDL2. Rendering is done using an IRIS GL-to-GLES2/3 rasterizer with a reference software rasterizer forked from the Alice 4 project. Event handling is done by SDL2, with events translated into GL's event system.
Each demo is a separate web page, with its own Javascript + WASM compiled by Emscripten from the original C/C++ source. Native Linux, Mac, and Windows builds are also available. Minimal modifications have been made to the original source, only what is necessary to build them 30+ years later for modern hardware and the browser.
See the architecture doc for more implementation details, and the latest smoke test for build status.
- Arena - no network play yet
- Bounce
- Buttonfly - Wade Olsen
- Cedit - Paul Haeberli, 1984
- Electropaint 1988 - David Tristram, 1988; IRIS GL, earliest version, Panel Library v7 from the 1988 Usenet posting (no sliders yet)
- Electropaint 1989 - David Tristram, 1989; IRIS GL, Panel Library 9.6; driven by Tristram's authentic default script; keyboard toggles
- Electropaint 1994 (OpenGL, decompiled) - 1994, IRIX screensaver decompiled by drvink; smooth HLS color + the famous default script
- Electropaint 1994 (OpenGL, reversed) 1994, reversed to somewhat-readable code and restored IRIS GL version's 4-fold mirrors + 30° camera — M toggles the original 1994 look
- Flight 1988 - Gary Tarolli, 1988; colormap-mode original, nearly original source (25 diff lines total) at the authentic 1280×1024; splash, plane menu, takeoff, crashes, and stable night mode all work; no network play
- Flight 1994 Rob Mace, 1994, version 3.4; the definitive IRIX release: RGB, lighting, 8 planes, full-width 3D horizon, instrument panel, HUD, upgraded plane models; no texture/fog/sound/network yet
- Gview (Barcelona) - Late 1980s; reversed from IRIX 3 binary: fly-through and turntable modes work; no materials, movie loops, or binary model cache; Performer/Inventor pre-cursor perhaps?
- Ideas
- Insect Thant Tessman, mid-1980s; originally for the IRIS 2400
- Jello Thant Tessman, 1987
- Logo Thant Tessman, 1987
- Newave - Late 1980s , originally for the 4D/70G; note the wave starts flat: right-click, edit, then go
- Twilight - Howard Look, 1991
- More IRIS GL demos
- Aux/Tk OpenGL demos
- GLUT OpenGL demos
- Inventor Slotcars, Maze
- Performer Town, Matterhorn, Yosemite
- Install Homebrew if you don't have it, then get SDL2 and Emscripten:
brew install SDL2
brew install emscripten- Build:
git clone https://github.com/sgi-demos/sgi-demos.git
cd sgi-demos
make-
Install Winget if you don't have it.
-
Install MSYS2 from cmd.exe, in order to get the clang compiler:
winget install MSYS2.MSYS2
setx PATH "%PATH%C:\msys64\clang64\bin"- Install clang toolchain, SDL2, and bison (for buttonfly menu parsing) in MSYS2 CLANG64 shell:
pacman -Syu
pacman -S base-devel mingw-w64-clang-x86_64-toolchain
pacman -S mingw-w64-clang-x86_64-SDL2
pacman -S bison-
Clone emscripten from Github. Cloning seems to work best with MSYS2 rather than using pacman. Follow the default install directions, not the Windows directions!
-
Add this line to the
~/.bashrcfile in MSYS2 CLANG64 shell:
source /path/to/emsdk/emsdk_env.sh- Build:
git clone https://github.com/sgi-demos/sgi-demos.git
cd sgi-demos
make- Demos coming next
- Fix logged issues
- Provide context for each demo:
- Overlay text in lower corner: Name, author, year, code link, provenance (IRIX version, dev toolbox, demo cd, etc.)
- Brief description/history/context for each demo - Obtain descriptions from .Info slide files
- Link to demo man page
- Add all-demos-in-one page thumbnail screenshot gallery page
- Add 'inspect demo' mode to pause, orbit, zoom, pan, fly through demo scene (as a hidden override to the demo's own controls)
- Add popup/overlay help to show available key/mouse inputs
- Provide virtual mouse and keyboard for touch devices:
- Only display virtual keys and mouse functions used by the demo; use demo's qdevice() calls to determine this
- Displayed as transparent virtual mouse and key pictures overlaid on demo
- On always for touch devices
- On/off for mouse/keyboard devices, as hints
- Everyone who worked at SGI, for the eye candy and the baller computers.
- The Alice 4 folks, for the inspiration and the GL implementation.
- drvink for the custom MIPS decompiler and resulting ep decompilation, Electroportis
- Claude Fable 5 for gobbling up the to do list at incredible speed.
- Emscripten and SDL teams, for making a web port possible.
- Internet Archive, Bitsavers, WinWorld, IRIXNet, fsck.technology, jrra.zone, and others, for saving the history.
