The problem is that this geometry is made up of lots of hierarchical objects. These rough tree models, for example, each contain about 40 or 50 individual objects; one for every branch. This means that each tree model ends up submitting about 40 separate batches of geometry to the graphics card. Clearly, the thing to do was to merge all of the geometry down into a single blob which could be sent all at once. The trouble was figuring out how to actually do that, within the confines of the VectorStorm library.
Well, it took a bit of doing, but I finally worked it and implemented it today, and the difference is stunning. Compare the length of the green timing bar in this screenshot against the one from before these changes, to see just how much of a difference it’s made.
In theory, I could make it even faster by drawing these trees as instances; in effect, telling the video card “draw this object in these two hundred places”, instead of telling it to “draw this object here” two hundred times. A subtle distinction, but an important one for optimum performance. I imagine that I’ll eventually need to do that. But for now, this is a huge boost in speed; I’m really pleased with it!