"The problem is, entities can and do consist of more than one brush/material set up, even within b3d"
then you'd just change the sorting from per-entity to per-surface, right before rendering. call some kind of a "buffer" function on each surface, which would stick it into a dynamic array at the correct position.. then render the dynamic array. not sure how fast it'd be, but i've been thinking about doing that in my engine to see. unfortunately i won't have time to try it until christmas..
then you'd just change the sorting from per-entity to per-surface, right before rendering. call some kind of a "buffer" function on each surface, which would stick it into a dynamic array at the correct position.. then render the dynamic array. not sure how fast it'd be, but i've been thinking about doing that in my engine to see. unfortunately i won't have time to try it until christmas..