Creates a new ExerciseRenderer bound to a canvas element.
The HTMLCanvasElement to draw on.
Appends a live ink point to the in-progress stroke path and redraws.
Called on every pointermove while the student is drawing.
The latest PressurePoint from StrokeCapture.
Removes all committed student strokes from the canvas (used when the tutor clears the board or starts a new exercise).
Redraws all layers (exercise primitives + committed ink + live ink). Idempotent — safe to call many times per second from animation loops.
Replaces the current exercise-layer primitives with a new set and redraws.
Ordered list of VisualPrimitives from the tutor.
Paints exercise content and live student ink onto the device canvas.