X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Fglx%2Fpipes.c;h=77be33e1fce2ed41c40b4ea451b4e3f0aea39df0;hp=2b83bbfd23a11c9e3bcb1d29419b180fc42c3191;hb=4361b69d3178d7fc98d0388f9a223af6c2651aba;hpb=d6b0217f2417bd19187f0ebc389d6c5c2233b11c diff --git a/hacks/glx/pipes.c b/hacks/glx/pipes.c index 2b83bbfd..77be33e1 100644 --- a/hacks/glx/pipes.c +++ b/hacks/glx/pipes.c @@ -69,6 +69,7 @@ static const char sccsid[] = "@(#)pipes.c 4.07 97/11/24 xlockmore"; "*suppressRotationAnimation: True\n" \ # define refresh_pipes 0 +# define release_pipes 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ @@ -132,7 +133,7 @@ ENTRYPOINT ModeSpecOpt pipes_opts = #ifdef USE_MODULES ModStruct pipes_description = -{"pipes", "init_pipes", "draw_pipes", "release_pipes", +{"pipes", "init_pipes", "draw_pipes", NULL, "draw_pipes", "change_pipes", NULL, &pipes_opts, 1000, 2, 5, 500, 4, 1.0, "", @@ -688,17 +689,15 @@ pipes_handle_event (ModeInfo *mi, XEvent *event) static void generate_system (ModeInfo *); +static void free_pipes (ModeInfo *); + ENTRYPOINT void init_pipes (ModeInfo * mi) { int screen = MI_SCREEN(mi); pipesstruct *pp; - if (pipes == NULL) { - if ((pipes = (pipesstruct *) calloc(MI_NUM_SCREENS(mi), - sizeof (pipesstruct))) == NULL) - return; - } + MI_INIT (mi, pipes, free_pipes); pp = &pipes[screen]; pp->window = MI_WINDOW(mi); @@ -1168,57 +1167,47 @@ change_pipes (ModeInfo * mi) #endif /* !STANDALONE */ -ENTRYPOINT void -release_pipes (ModeInfo * mi) +static void +free_pipes (ModeInfo * mi) { - if (pipes != NULL) { - int screen; - - for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { - pipesstruct *pp = &pipes[screen]; - - if (pp->glx_context) { - - /* Display lists MUST be freed while their glXContext is current. */ - glXMakeCurrent(MI_DISPLAY(mi), pp->window, *(pp->glx_context)); - - if (pp->valve) - glDeleteLists(pp->valve, 1); - if (pp->bolts) - glDeleteLists(pp->bolts, 1); - if (pp->betweenbolts) - glDeleteLists(pp->betweenbolts, 1); - - if (pp->elbowbolts) - glDeleteLists(pp->elbowbolts, 1); - if (pp->elbowcoins) - glDeleteLists(pp->elbowcoins, 1); - - if (pp->guagehead) - glDeleteLists(pp->guagehead, 1); - if (pp->guageface) - glDeleteLists(pp->guageface, 1); - if (pp->guagedial) - glDeleteLists(pp->guagedial, 1); - if (pp->guageconnector) - glDeleteLists(pp->guageconnector, 1); - if (pp->teapot) - glDeleteLists(pp->teapot, 1); - if (pp->dlists) - { - int i; - for (i = 0; i < pp->dlist_count; i++) - glDeleteLists (pp->dlists[i], 1); - free (pp->dlists); - free (pp->poly_counts); - } - } - } + pipesstruct *pp = &pipes[MI_SCREEN(mi)]; - (void) free((void *) pipes); - pipes = NULL; + if (pp->glx_context) { + + /* Display lists MUST be freed while their glXContext is current. */ + glXMakeCurrent(MI_DISPLAY(mi), pp->window, *(pp->glx_context)); + + if (pp->valve) + glDeleteLists(pp->valve, 1); + if (pp->bolts) + glDeleteLists(pp->bolts, 1); + if (pp->betweenbolts) + glDeleteLists(pp->betweenbolts, 1); + + if (pp->elbowbolts) + glDeleteLists(pp->elbowbolts, 1); + if (pp->elbowcoins) + glDeleteLists(pp->elbowcoins, 1); + + if (pp->guagehead) + glDeleteLists(pp->guagehead, 1); + if (pp->guageface) + glDeleteLists(pp->guageface, 1); + if (pp->guagedial) + glDeleteLists(pp->guagedial, 1); + if (pp->guageconnector) + glDeleteLists(pp->guageconnector, 1); + if (pp->teapot) + glDeleteLists(pp->teapot, 1); + if (pp->dlists) + { + int i; + for (i = 0; i < pp->dlist_count; i++) + glDeleteLists (pp->dlists[i], 1); + free (pp->dlists); + free (pp->poly_counts); + } } - FreeAllGL(mi); } XSCREENSAVER_MODULE ("Pipes", pipes)