The August 2017 Quicklisp dist has been released, and it has a few libraries I am proud to announce.
Over the last month I have been pretty busy writing code. This month's Quicklisp dist introduces 3 new software projects of mine:
A PNG (Portable Network Graphics) image format decoder.
This was developed out of frustration with the only other native Common Lisp PNG decoder available, png-read. Part of the frustration was due to the incredible slow performance, making it unsuitable to load dozens or hundreds of images at load-time for game development, which I do quite a bit of. That led me to try optimizing png-read, with mild success. After spending a couple days trying to optimize png-read any further, I lost interest, mostly due to the quality of its codebase. That led me to try a fresh approach, which became pngload. I'd like to give a special thanks to Bart Botta for contributing a lot of great code to the project in areas such as image decoding, deinterlacing, and platform-specific optimization techniques.
This takes a collection of small images on disk, or a directory thereof, and builds a larger image with them all packed efficiently into. In other words, it creates an efficient spritesheet or texture atlas. It employs the maxrects algorithm to pack images tightly, and outputs a metadata file alongside the resulting image, which can be used to extract images later in code.
This was just a fun idea I had that I wanted to try, which encodes data, storing it in the URL of third-party URL-shortening services. While it does work, it is only a proof of concept, and was not designed with robustness or efficiency in mind. This will likely never be revisited, as it was just a way to test an idea that is not very interesting to me in retrospect. I released it anyway for the educational aspect.
If you like any of this software and find it useful, let me know by ‘starring’ it on Github, or in the comments section below — I'd love to hear about how you are using them!