Me gustaría tener un contexto OpenGL sin ventanas (en GNU/linux con Xorg y Windows). No voy a procesar nada, solo llamaré a funciones como glGetString
, glCompileShader
y similares.WindowGL OpenGL
He hecho algunas goggles pero no he encontrado nada útil, excepto crear una ventana oculta; que me parece un truco.
¿Alguien tiene una mejor idea (para cualquier plataforma)?
EDIT: Con Xorg que fue capaz de crear y adjuntar un contexto OpenGL a la raíz-ventana:
#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: He escrito un breve artículo sobre windowless opengl (con código de ejemplo) en base a la respuesta aceptada
Uso GetDesktopWindow para la plataforma Windows. – Luca