Hmm, my last post is already from a few months ago, when we released our last 64k intro, Exo
. In the meantime I've been working slowly on some improvements on nerve. The biggest thing I've been working on is a new texture generator library. I have been using my own texture generator engine (which is called Gentex) for about 4 years now
.Which makes it the oldest component of my demo system.
Over the years I've been improving it, but it never really converged to anything awesome. Its codebase is huge (it consumes 8kb of uncompressed bytes of Exo), it sacrifices a lot of precision since it uses 8bit per component bitmaps internally, its GUI is separated from my shader development tool
, making the creation of shaders a very laberous task, and only very basic and elementary nodes/effects are implemented.
So I'm currently working on a brand new texture engine, dubbed Texo
. It consists of a simple static lib, which is used to generate a texture by iteratively applying generators and effects on bitmaps, and a GUI part, which is used to author/design the textures.
For the first time I've been actively keeping an eye on the final uncompressed filesize. For Gentex I never performed any file size measurements, mostly out of laziness. But for Texo's static library I've started doing this, and it has been quite rewarding. At the moment my lib only occupies 2kb of space when all features are used. That's already a lot smaller than Gentex; but note that not all of Gentex' features has been implemented yet. To get to such a small lib, I've been actively using SSE. Using C++ SSE intrinsics turned out to deliver both small and fast code. Another nice side effect is that it was relatively easy to use 32bit per component floating point bitmaps. That improved the precision of the textures, and assured simpler code; no more bitshifting and masking; no more inefficient conversions between floats and chars.
I'm doing all file size measurements using a custom IDA script. IDA
is a really nice disassembler/debugger which can be automated using self-written scripts. So I've made a test application that links with Texo and uses all of its features, and a simple IDA script that opens my .exe and dumps out a list of all functions and their code-sizes to a text file. This way I can easily get the actual size of every function in my final executable. There might be easier ways of achieving this, but for me this method works awesomely
Next to the static library of Texo, I've also been working on the GUI part. It's currently simply integrated into Materialist
, which should make creating new shaders and/or textures much easier. But I'll tell more about that some other time. I really want to show some pictures of the new GUI, but that would make this post a bit too long.
For the upcoming weeks I'm planning on adding new things to Texo, and further integrating the system with the rest of Nerve. And I have a huge list of cool improvements for Pandora, our software synthesizer, that Izard likes to have in, so that's something I'll be working on too.
Ohw, and the Evoke
demoparty is already appearing at the horizon. Only one month to go...