From http://www.jwz.org/xscreensaver/xscreensaver-5.37.tar.gz
[xscreensaver] / hacks / glx / lockward.c
index 60d684d10878afce7602bc92774411c83e04060c..404a49fd561389842e3a1da2f132dffb1b165b34 100644 (file)
@@ -40,6 +40,7 @@
                        "*showFPS:      False   \n"
 
 #define        refresh_lockward        0
+#define        release_lockward        0
 
 
 #define        NUMOF(x)        (sizeof ((x)) / sizeof ((*x)))
@@ -136,7 +137,7 @@ typedef struct lockward_context {
 /***************************************************************************
  * Prototypes.
  */
-static void free_lockward (lockward_context *ctx);
+static void free_lockward (ModeInfo *mi);
 
 
 /***************************************************************************
@@ -203,8 +204,12 @@ ENTRYPOINT ModeSpecOpt lockward_opts = {
 ENTRYPOINT void
 reshape_lockward (ModeInfo *mi, int width, int height)
 {
+       lockward_context *ctx = &g_ctx[MI_SCREEN (mi)];
        GLfloat h = (GLfloat) height / (GLfloat) width;
 
+       glXMakeCurrent (MI_DISPLAY (mi), MI_WINDOW (mi),
+                       *(ctx->glx_context));
+
        glViewport (0, 0, (GLint) width, (GLint) height);
 
        glMatrixMode (GL_PROJECTION);
@@ -827,15 +832,7 @@ init_lockward (ModeInfo *mi)
        lockward_context        *ctx;
        int             i, n;
 
-       if (!g_ctx) {
-               g_ctx = (lockward_context *) calloc (MI_NUM_SCREENS (mi),
-                                                  sizeof (lockward_context));
-               if (!g_ctx) {
-                       fprintf (stderr, "%s: can't allocate context.\n",
-                                progname);
-                       exit (1);
-               }
-       }
+       MI_INIT (mi, g_ctx, free_lockward);
        ctx = &g_ctx[MI_SCREEN (mi)];
 
        ctx->glx_context = init_GL (mi);
@@ -928,10 +925,17 @@ init_lockward (ModeInfo *mi)
 }
 
 static void
-free_lockward (lockward_context *ctx)
+free_lockward (ModeInfo *mi)
 {
+       lockward_context        *ctx = &g_ctx[MI_SCREEN (mi)];
        int i;
 
+       if (!ctx->glx_context)
+               return;
+
+       glXMakeCurrent (MI_DISPLAY (mi), MI_WINDOW (mi),
+                       *(ctx->glx_context));
+
        if (ctx->blink.noise)
                free (ctx->blink.noise);
        if (glIsList (ctx->rings))
@@ -951,25 +955,6 @@ free_lockward (lockward_context *ctx)
        }
 }
 
-ENTRYPOINT void
-release_lockward (ModeInfo *mi)
-{
-       int i;
-
-       if (!g_ctx)
-               return;
-
-       for (i = MI_NUM_SCREENS (mi);  --i >= 0; ) {
-               if (g_ctx[i].glx_context)
-                       glXMakeCurrent (MI_DISPLAY (mi), MI_WINDOW (mi),
-                                       *(g_ctx[i].glx_context));
-               free_lockward (&g_ctx[i]);
-       }
-
-       FreeAllGL (mi);
-       free (g_ctx);  g_ctx = NULL;
-}
-
 
 XSCREENSAVER_MODULE ("Lockward", lockward)