/* xlock-gl.c --- xscreensaver compatibility layer for xlockmore GL modules.
- * xscreensaver, Copyright (c) 1997-2008 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1997-2015 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 <stdio.h>
#include "xlockmoreI.h"
-#include "glxfonts.h"
-
-#include <GL/gl.h>
-#include <GL/glu.h>
-#include <GL/glx.h>
+#include "texfont.h"
#ifndef isupper
# define isupper(c) ((c) >= 'A' && (c) <= 'Z')
Window window = mi->window;
Screen *screen = mi->xgwa.screen;
Visual *visual = mi->xgwa.visual;
- GLXContext glx_context = 0;
XVisualInfo vi_in, *vi_out;
int out_count;
+ if (mi->glx_context) {
+ glXMakeCurrent (dpy, window, mi->glx_context);
+ return &mi->glx_context;
+ }
+
+# ifdef HAVE_JWZGLES
+ jwzgles_make_current(jwzgles_make_state(state));
+# endif
+
vi_in.screen = screen_number (screen);
vi_in.visualid = XVisualIDFromVisual (visual);
vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask,
{
XSync (dpy, False);
orig_ehandler = XSetErrorHandler (BadValue_ehandler);
- glx_context = glXCreateContext (dpy, vi_out, 0, GL_TRUE);
+ mi->glx_context = glXCreateContext (dpy, vi_out, 0, GL_TRUE);
XSync (dpy, False);
XSetErrorHandler (orig_ehandler);
if (got_error)
- glx_context = 0;
+ mi->glx_context = 0;
}
XFree((char *) vi_out);
- if (!glx_context)
+ if (!mi->glx_context)
{
fprintf(stderr, "%s: couldn't create GL context for visual 0x%x.\n",
progname, (unsigned int) XVisualIDFromVisual (visual));
exit(1);
}
- glXMakeCurrent (dpy, window, glx_context);
+ glXMakeCurrent (dpy, window, mi->glx_context);
{
GLboolean rgba_mode = 0;
1.0);
}
+ glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
/* GLXContext is already a pointer type.
Why this function returns a pointer to a pointer, I have no idea...
*/
- {
- GLXContext *ptr = (GLXContext *) malloc(sizeof(GLXContext));
- *ptr = glx_context;
- return ptr;
- }
+ return &mi->glx_context;
}
-
\f
/* clear away any lingering error codes */
case GL_STACK_OVERFLOW: e = "stack overflow"; break;
case GL_STACK_UNDERFLOW: e = "stack underflow"; break;
case GL_OUT_OF_MEMORY: e = "out of memory"; break;
+#ifdef GL_INVALID_FRAMEBUFFER_OPERATION
+ case GL_INVALID_FRAMEBUFFER_OPERATION:
+ e = "invalid framebuffer operation";
+ break;
+#endif
#ifdef GL_TABLE_TOO_LARGE_EXT
case GL_TABLE_TOO_LARGE_EXT: e = "table too large"; break;
#endif