“The world is not a big tree – a coffee mug on a desk is not a child of the desk, or a sibling of any other mug, or a child of the house it’s in or the parent of the coffee it contains or anything – it’s just a mug. It sits there, bolted to nothing. (…) Fundamentally of course you do have to resolve a traversal order somehow – the objects need rendering, and there’s some sort of mostly-optimal way to do it. But you’re just never going to get that ordering by just traversing a single tree/graph according to some rules.
1. Typically, a graphics-card driver will try to take the entire state of the rendering pipeline and optimise it like crazy in a sort of “compilation” step. In the same way that changing a single line of C can produce radically different code, (…)
2. Because of this, the number of state changes you make between rendering calls is not all that relevant any more. (…)
3. On a platform like the PC, you often have no idea what sort of card the user is running on. (…)