X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fglcells.c;h=adf98666a7fa25cc0ac7bb2a5760cd45158d74ae;hb=39809ded547bdbb08207d3e514950425215b4410;hp=4c651763321d551135236d84b590b7703e99f7f5;hpb=aa75c7476aeaa84cf3abc192b376a8b03c325213;p=xscreensaver diff --git a/hacks/glx/glcells.c b/hacks/glx/glcells.c index 4c651763..adf98666 100644 --- a/hacks/glx/glcells.c +++ b/hacks/glx/glcells.c @@ -36,8 +36,8 @@ #define INDEX_OFFSET 100000 #define NUM_CELL_SHAPES 10 -#define refresh_glcells 0 -#define glcells_handle_event 0 +#define release_glcells 0 +#define glcells_handle_event xlockmore_no_events #define DEF_DELAY "20000" #define DEF_MAXCELLS "800" @@ -1272,14 +1272,7 @@ init_glcells( ModeInfo *mi ) int i, divisions; State *st=0; - if (!sstate) { - sstate = (State *) - calloc( MI_NUM_SCREENS(mi), sizeof(State) ); - if (!sstate) { - fprintf( stderr, "%s: out of memory\n", progname ); - exit(1); - } - } + MI_INIT(mi, sstate); st = &sstate[MI_SCREEN(mi)]; st->glx_context = init_GL(mi); @@ -1368,23 +1361,28 @@ draw_glcells( ModeInfo *mi ) } ENTRYPOINT void -release_glcells( ModeInfo *mi ) +free_glcells( ModeInfo *mi ) { int i; State *st = &sstate[MI_SCREEN(mi)]; + + if (st->glx_context) { + glXMakeCurrent( MI_DISPLAY(mi), MI_WINDOW(mi), + *(st->glx_context) ); - /* nuke everything before exit */ - if (st->sphere) free_Object( st->sphere ); - if (st->food) free( st->food ); - for (i=0; icell_list[i] != -1) { - glDeleteLists( st->cell_list[i], 1 ); + /* nuke everything before exit */ + if (st->sphere) free_Object( st->sphere ); + if (st->food) free( st->food ); + for (i=0; icell_list[i] != -1) { + glDeleteLists( st->cell_list[i], 1 ); + } } + if (st->cell) free( st->cell ); + free( st->disturbance ); + glDeleteTextures( 1, &st->texture_name ); + free( st->texture ); } - if (st->cell) free( st->cell ); - free( st->disturbance ); - glDeleteTextures( 1, &st->texture_name ); - free( st->texture ); } XSCREENSAVER_MODULE( "GLCells", glcells )