If convenience is what you want, that can be provided by a 2D canvas. This could even support a "soft framebuffer", i.e, a pixel-perfect canvas taking up the full screen, or some well-defined window inside it. But that would not be a low-level rendering API, of course.