Mi piacerebbe avere un contesto OpenGL senza finestre (su GNU/linux con Xorg e Windows). Non renderò nulla ma solo chiamate funzioni come glGetString
, glCompileShader
e simili.OpenGL senza finestre
Ho fatto qualche goggling ma non ho trovato nulla di utile, tranne la creazione di una finestra nascosta; che mi sembra un trucco.
Così qualcuno ha un'idea migliore (per qualsiasi piattaforma)?
EDIT: Con Xorg sono stato in grado di creare e collegare un contesto OpenGL alla radice dei finestrini:
#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: Ho scritto un breve articolo su windowless opengl (con il codice di esempio) in base alla risposta accettata
Usa GetDesktopWindow per la piattaforma Windows. – Luca