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.