Home
Admin | Edit

The light - Linux 256 bytes (Outline 2023)

link

100% x86 assembly program again and my first heavy use of the stack in a procedural graphics intro, i rewrote the code at least 3 times to fit the three layers i wanted to add.

It shows a night scene of a light illuminating some forefront sea / road and distant city lights / stars backdrop.

The idea was to produce something "less abstract" on Linux than my previous attempts, looked through my old minsky sketches and i had this sea reflection thingy which was a bit boring alone so i tried to build something around it.

Wrote an intermediate C version on Godbolt from which i used the GCC ASM output as a way to get faster result, i think GCC did reasonably well with some bits of optimization for 2 layers but i had to rewrite the whole program assembly code to use 3 layers, the colors handling code is the only part that didn't change that much compared to the GCC output.

There is three layers (backdrop, light, sea) with 8 parameters each, the (distorted) minsky circle algorithm use a lot of right shifts and the stack is heavily used to store the minsky x,y state for each layers (6 states), i also push the parameters and handle most of the right shifts with AVX2 vpsravd instruction.

There is some x86 tricks to handle drawing direction (up / down) which is dependent on data order / single bit pattern.

The program with the creation process i enjoyed the most probably, i was kinda stuck with 2 layers for some times and really wanted to fit in three layers, i had an idea with the stack and AVX2 and the dev took a night with the binary ending exactly at 256 bytes which was a very satisfying experience ! :)

I also built a small p5js tool to adjust the parameters of the layers. Download. (4.3MB .zip)

The 2 layers version i built upon. (also 256 bytes)

original 2 layers version, scaling, colors and lens flare fakery was perhaps better, a tiny bit higher bytes cost though

The light "demotool", all images produced with this are 256 bytes ! :)

some early minimalist version which i liked, also see this

another version with a bent sky, the forefront didn't fit much

a rough "planet" seen from above version


"rain" layer with heavy transforms, was a potential candidate

the "too much" fake Bokeh version

back to topLicence Creative Commons