Reuse visuals to avoid MAX_PIXELFORMATS limit.
Activated the code to support the stencil buffer.

diff --git a/graphics/x11drv/opengl.c b/graphics/x11drv/opengl.c
index 7e766fa..36253db 100644
--- a/graphics/x11drv/opengl.c
+++ b/graphics/x11drv/opengl.c
@@ -94,6 +94,7 @@
   int att_list[64];
   int att_pos = 0;
   XVisualInfo *vis;
+  int i;
   
   if (TRACE_ON(opengl)) {
     TRACE("(%p,%p)\n", physDev, ppfd);
@@ -101,14 +102,6 @@
     dump_PIXELFORMATDESCRIPTOR((PIXELFORMATDESCRIPTOR *) ppfd);
   }
 
-  /* For the moment, we are dumb : we always allocate a new XVisualInfo structure,
-     we do not try to find an already found that could match */
-  if (physDev->used_visuals == MAX_PIXELFORMATS) {
-    ERR("Maximum number of visuals reached !\n");
-    /* Should SetError here... */
-    return 0;
-  }
-
   if (ppfd->dwFlags & PFD_DRAW_TO_BITMAP) {
     ERR("Flag not supported !\n");
     /* Should SetError here... */
@@ -125,16 +118,16 @@
   /* These flags are not supported yet...
      
      NULL_TEST_AND_ADD2(ppfd->cAlphaBits, GLX_ALPHA_SIZE, 8);
-     ADD2(GLX_ACCUM_SIZE, ppfd->cAccumBits); 
-     ADD2(GLX_STENCIL_SIZE, ppfd->cStencilBits);
-     ADD2(GLX_AUX_BUFFERS, ppfd->cAuxBuffers); */
+     ADD2(GLX_ACCUM_SIZE, ppfd->cAccumBits); */
+  ADD2(GLX_STENCIL_SIZE, ppfd->cStencilBits); /* now suported */
+  /*   ADD2(GLX_AUX_BUFFERS, ppfd->cAuxBuffers); */
   att_list[att_pos] = None;
   
   ENTER_GL(); {
     /*
        This command cannot be used as we need to use the default visual...
        Let's hope it at least contains some OpenGL functionnalities
-       
+
        vis = glXChooseVisual(gdi_display, DefaultScreen(gdi_display), att_list);
     */
     int num;
@@ -152,6 +145,19 @@
     /* Should SetError here... */
     return 0;
   }
+  /* try to find the visualid in the already created visuals */
+  for( i=0; i<physDev->used_visuals; i++ ) {
+    if ( vis->visualid == physDev->visuals[i]->visualid ) {
+      XFree(vis);
+      return i+1;
+    }
+  }
+  /* now give up, if the maximum is reached */
+  if (physDev->used_visuals == MAX_PIXELFORMATS) {
+    ERR("Maximum number of visuals reached !\n");
+    /* Should SetError here... */
+    return 0;
+  }
   physDev->visuals[physDev->used_visuals++] = vis;
   
   return physDev->used_visuals;
@@ -256,9 +262,14 @@
   /* Depth bits */
   glXGetConfig(gdi_display, vis, GLX_DEPTH_SIZE, &value);
   ppfd->cDepthBits = value;
+
+  /* stencil bits */
+  glXGetConfig( gdi_display, vis, GLX_STENCIL_SIZE, &value );
+  ppfd->cStencilBits = value;
+  
   LEAVE_GL();
 
-  /* Aux, stencil : to do ... */
+  /* Aux : to do ... */
 
   ppfd->iLayerType = PFD_MAIN_PLANE;