OnFrame

fun OnFrame(onFrame: (FrameInfo) -> Unit)

The single per-frame primitive for filament-compose: runs onFrame once per display refresh (via withFrameNanos) without triggering recomposition. Every other per-frame helper — rememberSceneClock, FilamentEffect's onFrame, rememberFlightCameraState, io.github.erkko68.filament.compose.scene.rememberAnimationState — is built on this.

Use it directly for per-frame side effects (driving a transform, a material parameter, a custom entity) that don't need to be read back in composition. For an elapsed-time value you can read in a composable, use rememberSceneClock instead. For reacting to state changes rather than the frame clock, use GltfInstance's onUpdate (which runs per recomposition, not per frame).

The onFrame lambda may change between recompositions without restarting the loop.

OnFrame { frame ->
angle += frame.deltaSeconds * speed // advance independent of recomposition
}