I keep getting ideas for stuff I'd like to try and implement, but the old code was pretty brittle and didn't like to be shuffled around and experimented with. I've often wished for a flexible platform for working on global illumination algorithms in particular, where the core operations of ray intersection and so on are provided, but operations like specifying surface reflectance functions, light behaviour in media, and so on can all be controlled with a domain-specific language. (Yeah, I know I'm reinventing the RenderMan wheel a bit.)
So after impairing my judgment real good and thoroughly killing a chunk of common-sense neurons, I started up a new project and hammered out some code.
It is now 8:05 AM, and I have a really nice console class and some bootstrap Win32 code. 90% of it is cut and pasted from other projects and utilities I've done in the past.
There's no ray-related or even drawing-related code of any kind. It's full of potential thread-safety issues, which will cause serious problems for the parallel-rendering concepts I want to try later on.
I'm never going to get much time or inclination to work on this, especially as I have other side projects that I really ought to finish first. Next time I sit down with it (possibly sober), I'll almost certainly look at the boilerplate code I've got now, exclaim over how utterly crap it is, and rip it all out.
In other words, I probably just wasted an evening, and created yet another stub project on my hard drive that'll sit around for years and never get touched again.
At least the beer was good, and I have a pretty good excuse for sleeping through one of the most annoying days of the year. Speaking of which, I think I'll get right on that.