Ah of course. How times have changed. Xlib was considered a "high level" API. 
That said, if XCB is a little too low level for you, then you can have a middle ground by using XShmCreateImage instead of XCreateImage.
https://www.x.org/releases/X11R7.7/doc/xextproto/shm.html
It is pretty much a drop in replacement. I.e to this line:
https://github.com/osen/software-3d-renderer/blob/master/src/x11_platform/main.cpp#L48
That said, if XCB is a little too low level for you, then you can have a middle ground by using XShmCreateImage instead of XCreateImage.
https://www.x.org/releases/X11R7.7/doc/xextproto/shm.html
It is pretty much a drop in replacement. I.e to this line:
https://github.com/osen/software-3d-renderer/blob/master/src/x11_platform/main.cpp#L48