> Ryan, I just wanted to give a sincere thanks for doing this.
> Just curious, why did it take so long? People have been begging on here for years. What did you have to do to allow them to release it?
Sure - this is something I asked for many times, but AOL was generally reluctant to do it, which seemed fairly reasonable as they had one of the most popular visualizers out there, and didn't want to make it too easy for others to clone it.
But after enough time passes (...I added pixel shaders to Milkdrop in 2007, which we then renamed to Milkdrop 2) it's generally not such a big deal, as the technology becomes a bit more dated, and others even have some time to (approximately) clone it.
I was very glad to see them do it before Winamp closed up shop, though, as this way, there is a chance to revive it later - from both the source code and content perspectives.
I'm pretty busy with work right now, but someday I plan to delve back in and write the mother of all visualizers; at that time, it would be a horrible shame if I couldn't reuse all of the outstanding content that was written for MilkDrop.
One thing I've always kicked myself for not doing in 2007 was adding an offscreen buffer (or several) to which you could render extra stuff (invisible to the user). Basically take everything about the a preset as it is today (minus the composite shader) and bundle that all up, and make it render (using the warp shader) to a particular offscreen buffer. Let's call each of these bundles a render target (RT0, RT1, RT2, etc.). You could have up to N of these render targets in an MD3 preset. Then you still have a single composite shader for the preset, and it has access to read the contents of all N render targets, and it writes pixels to the screen. In addition, each RT would be able to read the contents of the other RTs. So, serially in time, rendering a frame would go something like: [render to RT0] [render to RT1] ... [render to last RT] [render to screen]. Of course, in each of these passes, you would have read access to all of the other RTs (except the RT you're currently writing - you can't read and write a texture at the same time), and to the screen (unless you're writing to it). (Note: you could actually allow read/write at the same time, if you double-buffer the textures, but this takes twice the memory.)
This is all actually pretty easy to hook up, but very powerful in practice.
Compatibility is easy: To update an MD2 preset to MD3, just put everything except the composite shader in the RT0 bundle, and then keep the composite shader as-is (but have it read RT0). Done. Now add/edit RT1 - or pull it from an existing MD2 preset (or an RT of an MD3 preset). The hardest part would be coming up with a more sensible name for each of these "bundles".
Other low-hanging fruit is upgrading to DX10 and adding 3D textures and float textures.
Also, importing DXF files (3D models) and then allowing the user to write code to perturb the vertices (or change their colors/alpha), or instance them, would be amazing. The user could even write shaders to light and/or texture the [instanced] models. Heck, these objects could be textured using the contents of the offscreen buffers.
Once you add these features, the sky is basically the limit. None of this should be too hard for a graphics programmer; it's just a matter of finding the time to do it.
I apologize for talking about all of this stuff without actually delivering it... I hope that's not too annoying. But I did want to point out that there is *much* more that could be done. (Hmmm... kickstarter?)
So anyway, as you can see, I've thought a lot about this, but I just haven't had the time to code it. But I hope to do so one of these days. I love music visualizers, and unless I'm hit by a bus, I seriously doubt I'll go my whole life without writing something new, and I'm confident that it would kick the living crap out of Milkdrop... with a lot of love from a community of brilliant preset authors.
Speaking of which... you guys have made Milkdrop so much more than I ever dreamed it could or would be. I really can't thank you all enough. Seriously... I wrote an engine... you guys made it beautiful. I am forever grateful for that.
See you on the interwebs...