X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fquasicrystal.c;h=b82f470e847f51aa68a2de7c306ba9392dbc9967;hb=refs%2Fheads%2Fmaster;hp=e342b17f692724b7ef7110fd2a06f24f06de18ce;hpb=d1ae2829ff0fd2a96c16a0c8c5420efaa47d7b30;p=xscreensaver diff --git a/hacks/glx/quasicrystal.c b/hacks/glx/quasicrystal.c index e342b17f..a988b7a2 100644 --- a/hacks/glx/quasicrystal.c +++ b/hacks/glx/quasicrystal.c @@ -22,11 +22,9 @@ "*contrast: 30 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ + "*suppressRotationAnimation: True\n" \ -# define refresh_quasicrystal 0 # define release_quasicrystal 0 -#undef countof -#define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" @@ -65,7 +63,9 @@ static XrmOptionDescRec opts[] = { { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-symmetry", ".symmetric", XrmoptionNoArg, "True" }, + { "-symmetric", ".symmetric", XrmoptionNoArg, "True" }, { "-no-symmetry", ".symmetric", XrmoptionNoArg, "False" }, + { "-nonsymmetric", ".symmetric", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-contrast", ".contrast", XrmoptionSepArg, 0 }, }; @@ -191,14 +191,7 @@ init_quasicrystal (ModeInfo *mi) int tex_width; int i; - if (!bps) { - bps = (quasicrystal_configuration *) - calloc (MI_NUM_SCREENS(mi), sizeof (quasicrystal_configuration)); - if (!bps) { - fprintf(stderr, "%s: out of memory\n", progname); - exit(1); - } - } + MI_INIT (mi, bps); bp = &bps[MI_SCREEN(mi)]; @@ -233,7 +226,7 @@ init_quasicrystal (ModeInfo *mi) } bp->symmetric_p = - get_boolean_resource (MI_DISPLAY (mi), "symmetry", "Symmetry"); + get_boolean_resource (MI_DISPLAY (mi), "symmetric", "Symmetric"); bp->contrast = get_float_resource (MI_DISPLAY (mi), "contrast", "Contrast"); if (bp->contrast < 0 || bp->contrast > 100) @@ -279,10 +272,7 @@ init_quasicrystal (ModeInfo *mi) glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glTexImage1D (GL_TEXTURE_1D, 0, GL_RGBA, tex_width, 0, - GL_RGBA, - /* GL_UNSIGNED_BYTE, */ - GL_UNSIGNED_INT_8_8_8_8_REV, - tex_data); + GL_RGBA, GL_UNSIGNED_BYTE, tex_data); check_gl_error("texture"); glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); @@ -315,7 +305,7 @@ draw_quasicrystal (ModeInfo *mi) if (!bp->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -480,6 +470,24 @@ draw_quasicrystal (ModeInfo *mi) glXSwapBuffers(dpy, window); } + +ENTRYPOINT void +free_quasicrystal (ModeInfo *mi) +{ + quasicrystal_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + for (i = 0; i < bp->count; i++) { + free_rotator (bp->planes[i].rot); + free_rotator (bp->planes[i].rot2); + if (bp->planes[i].texid) glDeleteTextures (1, &bp->planes[i].texid); + } + if (bp->planes) free (bp->planes); + if (bp->colors) free (bp->colors); + +} + XSCREENSAVER_MODULE ("QuasiCrystal", quasicrystal) #endif /* USE_GL */