basic viewport functionality