Finally! After 6 weeks of work, the resource-unstable branch has been merged into the CVS head. It’s been a hell of a long road, and I can’t say I’m surprised at the size of the entries in cvs mailing list after committing, I really did change a hell of a lot. There are still some issues - the changes I made to particle systems aren’t quite working yet for one, and I haven’t been able to test everything yet.
With the exception of a couple of limitations, which I’ve had to ask about in the XSI SDK forums, mesh exporting from XSI is now working. The limitations are that only one set of UVs is supported (because of the slightly odd way you have to get multiple UVs from XSI and it seemingly not being indexable with the triangle data I have to use), and that defining sub-areas of a PolygonMesh using poly clusters with which to change materials is not supported - you have to change materials with multiple PolygonMesh objects instead (which can be arbitrarily nested anyway).
Even though the resource-unstable branch still desperately needs my attention, I promised myself that I’d start work on the XSI exporter this week. I spent a lot of time reading the SDK docs and basically feeling my way around, and whilst it takes a bit of getting used to (like any new API), I’m pleased with what I’ve seen. I already figured out the various entry points, got a plugin loading, and sorted out how to write a custom dialog pane.
Now that the resource-unstable branch is now finally 100% compiling, I’m busy testing and fixing bugs which have gone undetected while I’ve been working on this for the past 6 weeks. It’s slow going (there were a lot of changes after all), but it’s gratifying to finally have something to run again! I hope to merge the branch into the head as soon as I can. I have, however, allocated some time over the next couple of days to work on the XSI exporter, and I’m keen to stick to that, much as I’d like to carry on bashing.
I’ve started unit testing the new base facilities I’ve added in resource-unstable since OgreMain is now building there. I’m using CppUnit to document the tests this time, since the tests I’m doing are internal in nature and don’t have the added complexity of having to check a visual result. I’ve had a really annoying issue though - I’ve had to rebuild a lot of the dependencies (zlib, freetype, now zziplib) and I started to get really odd random crashes inside basic tools like _fstat and _lseek (which zziplib was using).
Fourth Bruce: Michael Baldwin - this is Bruce. Michael Baldwin - this is Bruce. Michael Baldwin - this is Bruce. First Bruce: Is your name not Bruce, then? Michael: No, it’s Michael. Second Bruce: That’s going to cause a little confusion. The only reason I quoted that classic sketch is that it always pops into my head whenever I think of Australia. Highly inappropriate, but hey, Monty Python was ingrained in my subconscious from a young age.
I’ve terminated the FileSystem plugin since it wasn’t serving much of a purpose other than being arrogant about it’s independence, it has now been annexed into OgreMain (since you’d never want to be without basic filesystem access). Like the rest of the reworked Archive subsystem, it now returns streams rather than preloaded chunks, and has recursive searching options should you need them. Whilst I was at it I rewrote bits of the code to make it nicer to read.
The last couple of days have been about refactoring. I’ve been getting towards the end of the resource work in OgreMain (still lots to do in the plugins and samples, mind), and as I came to sort out the particle systems, I realised that whilst I was changing them, it would be a good idea to redesign one aspect of them that I’ve always regretted - the fact that ParticleSystem subclasses from BillboardSet.
Man, this resource work is taking longer than I expected. I’ve designed and implemented the main changes to the resource infrastructure, which means things like this are possible: resource grouping, unloading and reloading of groups, manual loader callbacks (for repeatable loading when resources are populated using code rather than coming from files), pre-declaring resources and receiving loading progress callbacks, file streaming. However, going through all the old resources and resource managers to implement this design is taking a lot of time, and it’s actually very dull.
Hmm, bit of a break there - partly because I was away on an Oracle performance tuning course all of last week. No real time for a large update, just a few bullets: the resource work is going well, although it’s very time consuming and rather repetetive in places, I’m still learning XSI (which I like an awful lot), Half Life 2 just landed (and yes, it’s rather good), and my back is slowly getting better.