menu_bookDocumentation
Engine Frame Loop Order: FrameStart, Scene Tick, and FrameEnd Sequence
Engine Frame Loop Order
The s&box engine frame loop runs in a specific order each frame. Understanding this is important for knowing when your code runs relative to rendering, physics, and networking.
Per-Frame Order (EngineLoop.RunFrame)
- RealTime.Update — updates real-time clock
- Time.Update — updates scene time
- FrameStart():
- SourceEngineFrame() — native engine frame (rendering submission)
- FrameEnd():
Scene Tick Order (Scene.SharedTick)
Within IGameInstanceDll.Tick(), the scene ticks in this order:
- ISceneStage.Start() events
- Network update (SceneNetworkUpdate)
- Fixed update loop (physics, OnFixedUpdate)
- ProcessDeletes
- Signal(StartUpdate)
- InternalUpdate → OnUpdate on all components
- Signal(UpdateBones)
- PreRender → OnPreRender on all components
- ProcessDeletes
- Signal(FinishUpdate)
- Sound flush
- ISceneStage.End() events
Frame Rate Clamping
The engine sleeps to enforce RenderSettings.MaxFrameRate. When the app is inactive, RenderSettings.MaxFrameRateInactive is used (if lower). Headless servers are capped at 60 FPS. Benchmark mode has no cap.
Was this helpful?