Yeah, the solution was obvious: just write a vertex shader that passes positions and texture coordinates along without transforming them. Then just draw a fullscreen “quad”
The code now no longer relies on glReadPixels / glDrawPixels, which should make the code more compatible with GLFW.
https://github.com/sjhalayka/julia4d3
Next… the text drawing code, using textured quads.