[C++] GLX Tutorial

Hanfling
Da man im Internet relativ wenig zu GLX findet, hier ein Tutorial. Ich such mir grad so die Sachen zusammen, deswegen werden wohl ein paar Fehler drin sein.
Ich bau jetzt grade keine wirkliche Fehlerabfrage rein, etc. füge ich vielleicht später hinzu. Anyway, der folgende Code setzt GLX 1.3 vorraus.

Zuerst bindet ihr die Header <GL/gl.h> und <GL/glx.h>.
Danach öffnet verbindet ihr euch mit dem xserver:
php:
1:
<?php Display *dsp XOpenDisplay(0); ?>

Danach holt ihr euch eine Framebufferkonfiguration. Soweit ich es verstanden habe ist die ein Array. (Ich glaube DefaultScreen(dsp) ist 0 bei lokal)
php:
1:
2:
<?php int n;
GLXFBConfig *fbcfg glXChooseFBConfig(dspDefaultScreen(dsp), 0, &n); ?>

Danach holt ihr euch eine XVisualInfo aus fbcfg:
php:
1:
<?php XVisualInfo *vis glXGetVisualFromFBConfig(dsp, *fbcfg); ?>

Danach müsst ihr euch einen GLXContext erstellen. Das letzte Parameter besagt ob die gl(x) Befehle durch den X-Command-Stream gehen sollen, oder direkt auf den Context zurückgegriffen wird (schneller, dafür nur lokal).
php:
1:
<?php GLXContext *con glXCreateNewContext(dsp, *fbcfgGLX_RGBA_TYPE0GL_TRUE); ?>

Danach müsst ihr ein XSetWindowAttribute struct füllen um damit ein Window zu erstellen. Dafür wird auch eine ColorMap benötigt. Danach wird mit der gleichen FBConfig ein GLXWindow erzeugt.
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<?php XSetWindowAttribute setwa;
setwa.colormap XCreateColorMap(dspRootWindow(dspvis->screen), vis->visualAllocNone));
setwa.border_pixel 0;
setwa.event_mask StructureNotifyMask;
Window win XCreateWindow(
  dspRootWindow(dspvis->screen), 
  /* x *//* y */320 /* width */240 /* height *//* border width*/,
  vis->depth /* depth */InputOutputvis->visual, 
  CWBorderPixel CWEventMask CWColorMap, &setwa);
XMapWindow(dspwin); // assign window to our Display
GLXWindow glxwin glXCreateWindow(dsp, *fbcfgwin0); ?>

So nun müsst ihr noch den GLXContext mit dem GLXWindow verknüpfen...
php:
1:
<?php glxMakeContextCurrent(dspglxwinglxwincon); ?>


So das wars erstmal...

Referenz der Benutzen X Funktionen
php:
1:
<?php // wenn ihr glx benutzt habt ihr eh die manpages dafür... ;) ?>


Referenz der Benutzen GLX Funktionen
php:
1:
2:
3:
4:
<?php GLXFBConfig *glXChooseFBConfig(Display *dpyint screen, const int attribListint *nelements);
XVisualInfo *glXGetVisualFromFBConfig(Display *dpyGLXFBconfig config);
GLXContext  *glXCreateNewContext(Display *dpyGLXFBConfig configint renderTypeGLXContext shareListBool direct);
GLXWindow *glXCreateWindow(Display *dspGLXFBConfig configWindow win, const int *attribList); ?>


jaja fehlt noch einiges... stay tuned...