I'm working on a Direct3D 9.0 (DirectX 9.0) framework class that will allow you to fire up D3D with a window in one function call.
Writing to the surface is as simple as retrieving a pointer to the primary surface (buffer) or secondary surface (back buffer) and using that to do pixel ops.
D3D will allow you to access the surfaces and you won't take a performance hit if you create the surfaces with the right flags.
Check back here in a few days. The framework is very easy and I will make it available to the board complete with docs on how to use it.
Perhaps another board member could do something similar for OpenGL.
You don't have to use 3D in DirectX 9.0, you can still create 2D games and I'm sure you can do this in OpenGL as well.