Development

Compiling

Whorld is designed to be an MFC VC++ 6.0 project. It may or may not compile correctly in other versions of MFC, or in .NET. You'll need the following files from the DirectX 8.1 SDK:

ddraw.h
ddrawex.h
ddraw.lib
dxguid.lib
dshow.h (and all of its dependencies)
strmbase.lib
quartz.lib

Note that Whorld may not be compatible with later versions of the SDK.

You'll also need the following files from HTML help:

htmlhelp.h
htmlhelp.lib

Revision History

The revision history is a spreadsheet containing all past, current, and future issues with Whorld. The issues are ordered by category, close date, and open date. The categories are as follows:

bug outstanding problem, to be fixed ASAP
done resolved problem or completed enhancement
hold proposed enhancement that's being deferred
punt outstanding problem that's being deferred
sack enhancement that was tried and abandoned
todo enhancement to be included in the next version

Blog

Whorld development notes

On the Horizon

Multiple instances
I made a pretty convincing jellyfish patch, and while I was watching it swim around, I realized the poor thing looked lonely all by itself in the tank. It wants some friends, i.e. multiple Whorld instances drawn within one frame. They could either overlap another, or in some cases you might see one through the other (e.g. if they're drawn with lines, or in X-Ray mode). Each instance should have independent properties, so they could be different patches. In the easy method, you'd only be able to control one at a time. The hard way would allow independent MIDI assignments, so you could use multiple MIDI control surfaces, one per Whorld. Dueling Whorlds?
Line and fill patterns
The GDI directly supports line and fill patterns, so why not use them to add texture? I implemented them in a test version and it looks promising, though they add a major performance hit. How to manage the patterns? The GDI only supports 5 line patterns, so that's easy enough, but the fill pattern can be any 8 x 8 monochrome bitmap. Some form obvious groups, e.g. dither patterns, or letters and numbers, but the rest are hard to categorize.
Ring fade-out
Wouldn't it be great if rings could gradually become transparent as they radiate out from the center? I've simulated this effect using dither and it looks fantastic! The rings disappear into thin air, like smoke rings. Sadly, dither is just too slow. The GDI doesn't support transparency in its drawing primitives, so the only other alternative I can see is to draw each ring to a temporary bitmap, and then blit it onto the back buffer using TransparentBlt. It's very wasteful, and probably also too slow. This feature might have to wait for Vista...
Windows screensaver
Screensaver architecture is pretty different from MFC style, but that's mostly just moving furniture around. The hard problem is making Whorld run without user input. A lot of energy has been spent making Whorld interactive, and a screensaver is a big step in the opposite direction. Do I need to write an AI algorithm that emulates all my performance techniques, or is there an easier way?
Beat detection
This could be an easy one. I need to experiment with AudioBox. If it works OK I'm done. It seems to require the .NET platform but that's not really a problem now that most people are running XP.
Movie editing
The movie export is great until you try to make a compilation. Right now you have to edit your clips together after you export them, which is absurd. Whorld should have a movie editor, especially since the edits would be non-lossy. I'm not proposing Avid-style timeline editing, just a simple script, consisting of links to clips, and in/out points. Even then it's still a sizeable project, but it's mostly UI, and has zero effect on the rest of the app.
Feedback
Several people have tried combining Whorld with hardware video feedback, and the results were very encouraging. The downside is that you need a video mixer, and unless you can afford $12K for a VGA mixer, you have to use S-video, which noticeably reduces the resolution and color saturation. This could be avoided if Whorld could generate its own feedback. One approach would be to keep a copy of the previous frame, and then combine it with the current frame using transparency.
Pucker
This parameter affects the "odd" polygon, i.e. the vertices that become the points of a star. Pucker is simply translation of the odd polygon, and it completes the series of odd polygon parameters, which include Star Factor (the odd polygon's radius) and Pinwheel (the odd polygon's rotation). Pucker opens up many new possibilities, because it's the first parameter to allow asymmetrical ring geometry.