manual viewport, no overdrawing