I also changed the render system so that it no longer directly handles the texture caching responsibility and it is now handled by the TextureResourceLoader which it holds, I also plan on doing the same thing with culling and sorting which will sort of work like this:
- User adds a bunch of render components to some entities, then on every update:
- RenderSystem request a cull by the assigned CullingMechanism (If one is assigned).
- RenderSystem requests a sort from the culled components using the SortingMechanism (If one is assigned).
- RenderSystem draws the culled and sorted vector.
Actually just talking about it I decided to do it, at the moment it just compares the bounds of all components against the current main view every update. I need to come up with a better way to cull objects though, a QuadTree comes to mind, but not sure how to update it I might have to add an isDirty flag to an entity and whenever it's position is changed update that.
So here is culling and sorting working on 7k+ entities:
Compared to no culling but sorting:
That's a difference of ~180 FPS!
Pretty good IMO!