Faster update of viewport

Instead of recreating the viewport every frame, selectively update it as
needed. Less jerky interaction