I currently have a standard game loop that calls process() and then draw() on the contents of a vector<Entity> of dynamically allocated Entities. (I have 2 vectors of pointers, one for processing and one for drawing, and the drawing vector is sorted by y-value of each entity before drawing because this is a top-down game that layers sprites based on that. They currently use raw-pointers because I didn't know shared_ptr existed when I started this project, but I'm going to refactor them into shared_ptr so the drawing vector won't lose stuff in the middle of a draw run)
I considered putting drawing in a separate thread so that the game logic won't be blocked if the draw calls take too long for some reason (although I don't really anticipate this happening).
Really I'm wondering how I should handle this situation, as well as whether the way I'm managing the sprite layering correctly and how I should determine the tick rate of the game logic.
(Here's a screenshot of my game right now if you're curious
it's my first game and it's really primitive right now so go easy on me pls)