Я хотел бы иметь контекст OpenGL без окон (на GNU/Linux с Xorg и Windows). Я не собираюсь ничего делать, кроме как только функции вызова, такие как glGetString
, glCompileShader
и тому подобное.
Я сделал некоторые очки, но не придумал ничего полезного, кроме создания скрытого окна; который кажется мне взломанным.
У кого-то есть лучшая идея (для любой платформы)?
EDIT: с Xorg мне удалось создать и прикрепить контекст OpenGL к корневому окну:
#include<stdio.h>
#include<stdlib.h>
#include<X11/X.h>
#include<X11/Xlib.h>
#include<GL/gl.h>
#include<GL/glx.h>
int main(int argc, const char* argv[]){
Display *dpy;
Window root;
GLint att[] = { GLX_RGBA, GLX_DEPTH_SIZE, 24, GLX_DOUBLEBUFFER, None };
XVisualInfo *vi;
GLXContext glc;
dpy = XOpenDisplay(NULL);
if ( !dpy ) {
printf("\n\tcannot connect to X server\n\n");
exit(0);
}
root = DefaultRootWindow(dpy);
vi = glXChooseVisual(dpy, 0, att);
if (!vi) {
printf("\n\tno appropriate visual found\n\n");
exit(0);
}
glc = glXCreateContext(dpy, vi, NULL, GL_TRUE);
glXMakeCurrent(dpy, root, glc);
printf("vendor: %s\n", (const char*)glGetString(GL_VENDOR));
return 0;
}
EDIT2: Я написал короткую статью о windowless opengl (с образцом кода) на основе принятого ответа.