One of the things I was catching up on this weekend was a little bit of contract work, which I can’t talk about specifically but let’s just say it was about porting some code to pure Direct3D. It’s been a while since I had to write everything in regular D3D code - all the D3D code I write these days is to add features to the existing OGRE base, and that’s not so bad, in small doses. But I really had forgotten just how much I passionately hated working in pure D3D all the time. It also reminds me of writing the predecessor to OGRE, a library specifically designed to hide the D3D API so I wouldn’t feel the need to claw my eyes out while coding for long periods. Cue wibbly-wobbly flashback sequence, except rather than nostalgic, it’s like a horror film. Starring me, desperately trying to nail a set of boards over the door to the basement where the vile SDK monster lives. Think Bruce Campbell, but shorter.
Even counting the fact that D3D has got nicer over time (wrapper functions in D3DX came along for example, an acknowledgement perhaps by even the designers that the original interface design was hideous to use in practice), it’s still cringeworthy at times. Of course, they started with the Win32 API and COM as a design base, so one could say that they were running with scissors right from the off - hardly the most attractive of designs. If I have to type LPSOMEREALLYLONGALLCAPSTYPEDEF again I think I’ll bite someone. Of course, it doesn’t help that the original app is all GL, which really rubs in how much less code you have to write to do the same fundamental things in GL sometimes. And of course in OGRE it’s even faster.
When I get this out the way I’m going to give the OGRE a big hug. He’s great, and I don’t appreciate him enough. 😀