- Optional variable/fixed time-step (precise enough for realistic physics)
- Optional multi-threaded updates
- Optional multi-threaded rendering (for D3D11 & OGL)
- Thread safety for memory and forms/controls/GUI stuff
Here are some of the things that concern me...
- Proper separation of render and update logic?
- Proper way to implement option of fixed vs variable time-step?
- Implementation of a Winforms-like "InvokeRequired" property for GUI thread safety?
I'd also like to know what might happen if I try to render something from another thread in, say, D3D10 (which doesn't offer multi-threaded rendering like 11)? Does the device interface just perform the rendering on the thread it was created on, or would it crash my engine? What about running my update loop on a totally separate thread from rendering? Is this acceptable or a "bad practice"? Should I instead offer the option to set "game components" to update themselves on separate threads (e.g., physics engine, content loading/streaming, etc as components which run their updates on new threads)? What is the best way to synchronize a very complex multi-threaded environment like this? What problems might I encounter, and what is the best way to work around them? Any further information is greatly appreciated...