As we always say, the Xmas Demo concept is about reproducing computationally intensive graphical effects on cheap low-end hardware. This year we decided to follow it for a change. The 2017 and 2020 Xmas Demos ran on an NVidia TX2 that wasn't very powerful. It had just 256 GPU cores and 4 ARM A57 cores. To make it a challenge, we dusted off a Jetson Nano Developer Kit that's newer but has even less power: Roughly 66% less than a TX2. On the other hand, it's matchbox sized and sells for just $99 if you can find it in your local electronics boutique. Rumor has it that it's been recently discontinued [1].
Xmas demos run in 60 fps regardless of what we decide to be the target hardware. Anything else would be lame. A measly 128 GPU cores clocked at a laid-back 921 MHz meant we had to go even further than usual in our (sometimes arcane) changes and optimizations. Only 900 cycles are available per pixel, so scaling had to be applied judiciously. We also had to cut down on graphics, overlays, crossfading, and the usual array of ditzy effects. The display area is slightly reduced to make room for an info display and a scrolltext that doubles as an fps indicator: If it's not smooth it's not 60 fps. Long story short, stylewise it's back to the old 80s megademo format with non-overlapping parts. We like that style.
As usual, we take our stabs at what the dingbats call modern programming in there. C is 52 years old this year, and so am I. (It's also 52 years since man last walked on the moon, but that's a whole different story.) There's no doubt that C will be around for another 52 years. I probably won't. However, my earliest C programs from the 90s still compile and run without problems. Where will crap written in javascript, python, unstable rust [2], floop, "swift", julia, java, ruby, dingo, etc. end up? [3]
Like last year, we used music composed and performed by C64 and Amiga legend Chris Huelsbeck. The track is called "Against the Clock" from the album "Dressed to Chill". Check out the links below. Sjur worked his magic on top of that, adding sound bites and effects where needed. The final mix was done using tube gear. Duh.
It's not an Xmas Demo without a spaceship! Sjur's awesome interpretation of USS Swinetrek should swing by in there somewhere. For those who remember The Muppet Show, it was featured in the recurring sketch Pigs in Space. It was funny then; it's hilarious now. Watch them before revisionists have them removed. The show and the demo.
Against the Clock [bandcamp.com] by Chris Huelsbeck [patreon.com].
Used under a royalty-free license.
Voice samples from District 9 (2009 film) [imdb.com].
Interlude from The Muppet Show (1976-1981 TV series) [imdb.com].
Sound and music mixed by Julin.
Archive: xmasdemo_data_2024.zip (browse)
File | Title | Artist |
data/SSSwinetrek.glb | USS Swinetrek | Julin |
data/smallbike.png | High Wheeler | Public Domain |
data/moi.png | Ministry of Information | A ripoff, sorry |
data/usspig.png | Pig Not Currently on a Wing | Another ripoff, sorry again |
This demo uses the V73D Engine [github.com] by Sjur Julin. It's a pure C and GLSL project with a minimum of dependencies, so it will compile and link with no fuzz. You will need it for building the Xmas Demo yourself. Both V73D and the Xmas Demo runs on Linux and Windows.
An assortment of shaders from ShaderToy [shadertoy.com] have been modified and used. Important! The shader files in the archive have been stripped of comments and recommented where we have changed things. Check the ShaderToy source for the author's intent. It's very helpful.
Archive: xmasdemo_src_2024.zip (browse)
File | Used in part(s) | Based on | Author | License |
Makefile | Julin | CC0 1.0 | ||
src/xmas2024.c | Julin & Corneliusen | CC0 1.0 | ||
src/vec.h | Corneliusen | CC0 1.0 | ||
shaders/noisy.fs | Whitened, Blackened | VHS Tape Noise | vladstorm | CC BY-NC-SA 3.0 |
shaders/galdance.fs | Intro, Outro | Galactic Dance | Sinuousity | CC BY-NC-SA 3.0 |
shaders/sponge.fs | Spongified | Menger Sponge Tunnel | kithy | CC BY-NC-SA 3.0 |
shaders/journey.fs | Journeyman | Torus Journey | PauloFalcao | CC BY-NC-SA 3.0 |
shaders/acid.fs | Acid Houses | Paper City | NuSan | CC BY-NC-SA 3.0 |
shaders/quatio.fs | Quatio | Corneliusen | CC0 1.0 | |
shaders/tunnel.fs | Pigs in Tunnel | Colorful Smoke Tunnel | meowyih | CC BY-NC-SA 3.0 |
shaders/twofield.fs | Twofield System | Twofield | w23 | CC BY-NC-SA 3.0 |
shaders/glassy.fs | Glassy Knoll | Transparent Lattice | Shane | CC BY-NC-SA 3.0 |
shaders/knots.fs | Knots Landing | Acrilic Knots | Elsio | CC BY-NC-SA 3.0 |
shaders/kaleido.fs | Kaleidonope | Simple Kishimisu | omansounds | CC BY-NC-SA 3.0 |
Whitened: The second frame says "We must peform a Quirkafleeg" [jdawiseman.com]. It's a level in Jet Set Willy II (1985 game), specifically the ZX Spectrum version which had the typo. The practice of quirkafleeg has lots in common with modern software development methods.
Journeyman: The scrolltext is an altered verse from "The Road to Hell Part 2" by Chris Rea. Having fun with the enormous amounts of energy wasted by crap written in python.
And all the cores jam up with snake shit
And there's nothing you can do
It's all just bits of energy
Flying away from you
Acid Houses: "Dove Nation Ninjas" is an anagram of "NVidia Jetson Nano". The scrolltext says the demo was recorded live at 59.912944,10.754639 [geohack.toolforge.org]. That's the location of a concert arena in Oslo, Norway. Was it recorded there? No. It was a dark and stormy night, scrolltexts had to be written, one thing led to another...
Quatio: The message "Return of the Xmas Demo" is shown when the bike passes through the middle. It's Xmas Demo number 6. We can't be more obvious than that.
Twofield System: "Do Ninjas Innovate" is an anagram of "NVidia Jetson Nano".
Glassy Knoll: "The Xmas Demo Lives" is a spoof on Jason Lives (1986 film), the 6th Friday the 13th movie. Yeah, it sounded better when we planned it. The scrolltext is an altered verse from "Put Your Lights On" by Santana (feat. Everlast). Snakes that whisper in your ear... pun intended.
Hey now, all you coders
Leave your lights on
Better leave your lights on
'Cause there's a python livin' in your PC
Whisperin' in your ear
Knots Landing: "Deviant Ninja Soon" is an anagram of "NVidia Jetson Nano". The Ministry of Information logo is shown. It's a reference to Brazil (1985 film). Alamogordo, New Mexico is mentioned in the scrolltext as a place where crap written in modern programming languages might end up. That's where Atari dumped unsold games in the 80s. Floop is listed as a programming language. Is it? Check this [archive.org].
Outro: A mirrored version of Intro... or is it? The Magic 8 Ball says: Don't count on it.
Blackened: The second to last frame says "Oh $#!+!The Central Cavern!" [jdawiseman.com]. It's a level in Jet Set Willy II (1985 game), a duplicate of the first level in Manic Miner (1983 game).
A bike too far: The high wheelers are a reference to The Prisoner (1967-1968 TV series). The series follow a probably unjustly imprisoned agent called Number Six.
The title that should not be: The large top text is not the part title. It's either an anagram of NVidia Jetson Nano or something related to Xmas Demo 6... or a pig. Titles are on the right. This is an Xmas Demo; nothing is as it seems.
Cobra Bar: What's with all the ninjas? Try making 3 related anagrams of "NVidia Jetson Nano" without using the word "java".
The old code and the sea: We had to work around the satan2 problem in a couple of places.
Low-end hardware keeps you on your toes. On the other hand, the new GLSL compiler does unrolling and
interleaving better [4], so we had to get creative. The main shader hacking
was done on a 3070: 2000 fps usually means it runs ok on the Nano [4]. A
recurring theme is missing colors in the original shaders. We fixed that, 80s style.
That's it. See you somewhere in time [5].
[1] It's Xmas! A reasonably priced Jetson Orin Nano "Super" [theregister.com] has just been released. That's good news for next year.
[2] Call a spade a shovel: Unstable rust [devclass.com], constrained memory.
[3] We really don't give a fuck. Watch the demo.
[4] ...and sometimes it doesn't.
[5] Maiden or Reeve? Take your pick.
Technical comments are welcome. Contact information is available here.
If you have a problem with the article text, the video, or the code in any way, please watch this informative video:
Remember to appreciate this SMBC strip titled "Duh" [smbc-comics.com].
This article is published under the following license: Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0)
Short summary:
You may copy and redistribute the material in any medium or format for any purpose, even commercially.
You must give appropriate credit, provide a link to the license, and indicate if changes were made.
If you remix, transform, or build upon the material, you may not distribute the modified material.