>>101845457
Tbh not sure the right term but like this
virtual handle<Render_Object> register_obj() = 0;
virtual void update_obj(handle<Render_Object> handle, const Render_Object& obj) = 0;
virtual void remove_obj(handle<Render_Object>& handle) = 0;
virtual handle<Render_Light> register_light(const Render_Light& l) = 0;
virtual void update_light(handle<Render_Light> handle, const Render_Light& l) = 0;
virtual void remove_light(handle<Render_Light>& handle) = 0;
...
Where those are all functions in the public renderer system interface. handles are just a template wrapper around a uint32. So when you want to render anything you take a handle and push data into it. Render_Obj has a Model pointer, a transform, an animator pointer, etc. I really ended up liking how it all works, anybody can take a handle to render stuff, so you arent tied to iterating over MeshComponents or a scene graph (the renderer has no idea about any of that). Usually I make a component that wraps a handle, but its cool cause one component can wrap multiple handles (my MeshComponent has both physics and rendering handles).
Internally you can store handles to the data however you like (I use one layer of indirection to a contiguous array), maybe separate static/dynamic stuff too.