Having a bitmap in normal system memory that we can write to the window or screen is easy though and should be more widely supported. Once you've got that you can write pixels, lines, rectangles, mandlebrots etc very easily and building up to a GUI toolkit is also quite easy and fun. This mechanism is fast enough for pretty much everything other than games on modern hardware.
I consider GPU acceleration a form of premature optimization - it adds complexity unnecessarily in many cases.
Here's my library for doing that on Windows and X11. https://github.com/abainbridge/deadfrog-lib