Main loop now uses requestAnimationFrame.