From http://www.jwz.org/xscreensaver/xscreensaver-5.30.tar.gz
[xscreensaver] / hacks / glx / xlock-gl-utils.c
index d72b4ebdd4aa4ad0d4884893441d05c3e4aecec0..85aa7de0f41631979e4bdac599cc11f61cce89f8 100644 (file)
@@ -1,5 +1,5 @@
 /* xlock-gl.c --- xscreensaver compatibility layer for xlockmore GL modules.
- * xscreensaver, Copyright (c) 1997-2008 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1997-2014 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
 #include "xlockmoreI.h"
 #include "glxfonts.h"
 
-#include <GL/gl.h>
-#include <GL/glu.h>
-#include <GL/glx.h>
-
 #ifndef isupper
 # define isupper(c)  ((c) >= 'A' && (c) <= 'Z')
 #endif
@@ -60,6 +56,10 @@ init_GL(ModeInfo * mi)
   XVisualInfo vi_in, *vi_out;
   int out_count;
 
+# ifdef HAVE_JWZGLES
+  jwzgles_reset();
+# endif
+
   vi_in.screen = screen_number (screen);
   vi_in.visualid = XVisualIDFromVisual (visual);
   vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask,
@@ -118,6 +118,21 @@ init_GL(ModeInfo * mi)
       glDrawBuffer (GL_FRONT);
   }
 
+  /* Sometimes glDrawBuffer() throws "invalid op". Dunno why. Ignore. */
+  clear_gl_error ();
+
+  /* Process the -background argument. */
+  {
+    char *s = get_string_resource(mi->dpy, "background", "Background");
+    XColor c = { 0, };
+    if (! XParseColor (dpy, mi->xgwa.colormap, s, &c))
+      fprintf (stderr, "%s: can't parse color %s; using black.\n", 
+               progname, s);
+    glClearColor (c.red   / 65535.0,
+                  c.green / 65535.0,
+                  c.blue  / 65535.0,
+                  1.0);
+  }
 
   /* GLXContext is already a pointer type.
      Why this function returns a pointer to a pointer, I have no idea...
@@ -129,7 +144,6 @@ init_GL(ModeInfo * mi)
   }
 }
 
-
 \f
 
 /* clear away any lingering error codes */