O OpenGL usa o Xlib para desenhar janelas e renderizar coisas, ou é o contrário?

Quero renderizar fontes e linhas em uma janela usandoOpenGL ouXlib, mas gostaria de saber qual é "mais fundamental".

Usando a interface Xlib, eu posso renderizar essas coisas com algo assim (que eu acheiaqui):

// gcc x_1.c -o x_1 -lX11 && ./x_1

#include <stdio.h>
#include <X11/Xlib.h>

// This program draws a red line and some text in a chosen font.
Display *display;
Window  window;
XSetWindowAttributes attributes;
XGCValues gr_values;
XFontStruct *fontinfo;
GC gr_context;
Visual *visual;
int depth;
int screen;
XEvent event;
XColor    color, dummy;

int main() {
     display = XOpenDisplay(NULL);
     screen = DefaultScreen(display);
     visual = DefaultVisual(display,screen);
     depth  = DefaultDepth(display,screen);
     attributes.background_pixel = XWhitePixel(display,screen);

     window = XCreateWindow( display,XRootWindow(display,screen),
                            200, 200, 350, 200, 5, depth,  InputOutput,
                            visual ,CWBackPixel, &attributes);
     XSelectInput(display,window,ExposureMask | KeyPressMask) ;
     fontinfo = XLoadQueryFont(display,"6x10");

     XAllocNamedColor(display, DefaultColormap(display, screen),"red",
                      &color,&dummy);

     gr_values.font = fontinfo->fid;
     gr_values.foreground = color.pixel;
     gr_context=XCreateGC(display,window,GCFont+GCForeground, &gr_values);
     XFlush(display);
     XMapWindow(display,window);
     XFlush(display);

     while(1){
        XNextEvent(display,&event);

        switch(event.type){
        case Expose:
             XDrawLine(display,window,gr_context,0,0, 100, 100);
             XDrawString(display,window,gr_context,100,100,"hello",5);
             break;
        case KeyPress:
             XCloseDisplay(display);
             return 1;

        }
     }
     return 0;
}

Agora, posso realizar exatamente a mesma coisa usando o código OpenGL puro, o que levanta algumas questões.

O OpenGL usa o Xlib para exibir janelas e renderizar fontes / primitivas geométricas? Ou é o contrário?

Qual deles devo usar se desejar mais controle "de baixo nível" sobre a renderização e a exibição?

Editar:

Meu aplicativo de destino é um editor de texto de barebones que renderiza apenasfontes de bitmap, possuem apenas 255 cores e somente a renderização de software (por exemplo, suponha que nenhuma GPU esteja presente).

eu tenteiCairo / Pango, SDL2, GTK eQt, mas são lentos e não respondem em comparação ao Xlib puro.

questionAnswers(3)

yourAnswerToTheQuestion