Lossless Image Compression in O(n) Time — introducing QOI, the Quite OK Image Format. 300 lines of C, single header library: phoboslab.org/log/2021/11/qo…
My wipEout rewrite only works with OpenGL, but I set up the code in a way to potentially support other rendering backends. To test whether this actually works, I implemented a very bare-bones wireframe software renderer. Almost playable!
Fiddling with the leaked WipEout source. It may not look like much, but getting this thing to compile and run on x86-64 was a royal pain. Rendering is in OpenGL, but all transforms still in software, hence the wobbliness.
The specification for the QOI format for lossless image compression has been finalized! It fits on a single-page PDF. Thanks to everyone who helped to make this happen! phoboslab.org/log/2021/12/qo…
For a fixed size array of objects, you can maintain two arrays of pointers to keep track of active/free ones. Seems a bit easier (and more efficient?) than a linked list and is always O(1) unlike a scan through the objects array. Does this pattern have a name?
Time Domain Audio Compression at 3.2 bits per Sample -- introducing QOA, the Quite OK Audio Format. 400 lines of C, single header library: phoboslab.org/log/2023/02/qo…
At last, I published high_impact – a simple 2D game engine completely written in C. Please read “Porting my JavaScript Game Engine to C for No Reason” phoboslab.org/log/2024/08/hi…
My C game engine expects you to define your entity struct _before_ you include parts of the lib. The struct has some required fields (with types from the lib), so you have to do a little dance to include everything. Which would you prefer?