Documentation
    Preparing search index...

    Interface RenderInterpolation

    Where a frame's §43 render poses come from, and how far between the last two fixed steps it is (§10, §43).

    app.on("render", (time) => {
    renderer.render(scene, views, { poseBuffer: poses, alpha: time.interpolationAlpha });
    });

    A backend given this record draws the interpolated pose of every node the buffer tracks — position lerped, rotation slerped — instead of the pose the last fixed step left behind; a backend given undefined draws the resolved world transforms (§7). Both are legitimate: the second is what a still frame, a picking pass, or a headless determinism run wants, because it is exactly the simulation state and nothing else.

    Nothing here is written to. §43's rule — "the render transform should not feed back into the physics state" — is the reason the pose buffer is passed as a source per frame rather than as something the renderer owns or updates; a renderer only ever calls computeRenderPose (decision, WP-3.6).

    The record may be a per-frame scratch object. Application reuses one (plan D7: the frame loop allocates nothing), so a backend must read poseBuffer and alpha during the render call and never retain the record itself — the same rule the views array and the pooled render items follow.

    interface RenderInterpolation {
        alpha: number;
        poseBuffer: PoseBuffer;
    }
    Index
    alpha: number

    How far the frame sits between the previous and the current fixed step: TimeState.interpolationAlpha (§9, §10), in [0, 1]. PoseBuffer clamps it, so an out-of-range or non-finite value degrades to an endpoint rather than extrapolating a pose the simulation never produced.

    poseBuffer: PoseBuffer

    The engine's previous/current pose store (§37, §43) — one per application, owned by whoever captures into it.