X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Fglx%2Fsuperquadrics.c;h=a566589cd3a2fba8539b4208e70cc5117192b01f;hp=7e1d33e27d7d61d031f47e6be669384f24a4a329;hb=ffd8c0873576a9e3065696a624dce6b766b77062;hpb=f3e0240915ed9f9b3a61781f5c7002d587563fe0 diff --git a/hacks/glx/superquadrics.c b/hacks/glx/superquadrics.c index 7e1d33e2..a566589c 100644 --- a/hacks/glx/superquadrics.c +++ b/hacks/glx/superquadrics.c @@ -1,10 +1,12 @@ -/* -*- Mode: C; tab-width: 4 -*- - * superquadrics.c --- 3D mathematical shapes - */ -#if !defined( lint ) && !defined( SABER ) -static const char sccsid[] = "@(#)superquadrics.c 4.04 97/07/28 xlockmore"; +/* -*- Mode: C; tab-width: 4 -*- */ +/* superquadrics --- 3D mathematical shapes */ + +#if 0 +static const char sccsid[] = "@(#)superquadrics.c 4.07 97/11/24 xlockmore"; #endif -/* Permission to use, copy, modify, and distribute this software and its + +/*- + * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in @@ -68,21 +70,15 @@ static const char sccsid[] = "@(#)superquadrics.c 4.04 97/07/28 xlockmore"; * Ed Mackey */ -/*- - * due to a Bug/feature in VMS X11/Intrinsic.h has to be placed before xlock. - * otherwise caddr_t is not defined correctly - */ - -#include - #ifdef STANDALONE # define PROGCLASS "Superquadrics" # define HACK_INIT init_superquadrics # define HACK_DRAW draw_superquadrics # define superquadrics_opts xlockmore_opts -# define DEFAULTS "*count: 25 \n" \ +# define DEFAULTS "*delay: 40000 \n" \ + "*count: 25 \n" \ "*cycles: 40 \n" \ - "*delay: 100 \n" \ + "*showFPS: False \n" \ "*wireframe: False \n" # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ @@ -104,11 +100,11 @@ static float spinspeed; static XrmOptionDescRec opts[] = { - {"-spinspeed", ".superquadrics.spinspeed", XrmoptionSepArg, (caddr_t) NULL} + {"-spinspeed", ".superquadrics.spinspeed", XrmoptionSepArg, 0} }; static argtype vars[] = { - {(caddr_t *) & spinspeed, "spinspeed", "Spinspeed", DEF_SPINSPEED, t_Float} + {&spinspeed, "spinspeed", "Spinspeed", DEF_SPINSPEED, t_Float} }; static OptionStruct desc[] = { @@ -116,7 +112,16 @@ static OptionStruct desc[] = }; ModeSpecOpt superquadrics_opts = -{1, opts, 1, vars, desc}; +{sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; + +#ifdef USE_MODULES +ModStruct superquadrics_description = +{"superquadrics", "init_superquadrics", "draw_superquadrics", "release_superquadrics", + "refresh_superquadrics", "init_superquadrics", NULL, &superquadrics_opts, + 1000, 25, 40, 1, 4, 1.0, "", + "Shows 3D mathematical shapes", 0, NULL}; + +#endif #include @@ -133,7 +138,7 @@ typedef struct { } state; typedef struct { - GLXContext glx_context; + GLXContext *glx_context; int dist, wireframe, flatshade, shownorms, maxcount, maxwait; int counter, viewcount, viewwait, mono; GLfloat curmat[4][4], rotx, roty, rotz, spinspeed; @@ -258,8 +263,13 @@ MakeUpStuff(int allstuff, superquadricsstruct * sp) } if (dostuff & 4) { if (sp->mono) { - b = g = r = (GLfloat) (140 + myrand(100)) / 255.0; - b2 = g2 = r2 = ((r > 0.69) ? (1.0 - r) : r); + if (sp->wireframe) { + b = g = r = 1.0; + b2 = g2 = r2 = 1.0; + } else { + b = g = r = (GLfloat) (140 + myrand(100)) / 255.0; + b2 = g2 = r2 = ((r > 0.69) ? (1.0 - r) : r); + } } else { r = (GLfloat) (40 + myrand(200)) / 255.0; g = (GLfloat) (40 + myrand(200)) / 255.0; @@ -705,23 +715,20 @@ init_superquadrics(ModeInfo * mi) return; } sp = &superquadrics[screen]; - sp->mono = (MI_WIN_IS_MONO(mi) ? 1 : 0); + sp->mono = (MI_IS_MONO(mi) ? 1 : 0); - sp->glx_context = init_GL(mi); + if ((sp->glx_context = init_GL(mi)) != NULL) { - InitSuperquadrics(MI_WIN_IS_WIREFRAME(mi) || sp->mono, 0, - MI_BATCHCOUNT(mi), MI_CYCLES(mi), spinspeed, sp); - ReshapeSuperquadrics(MI_WIN_WIDTH(mi), MI_WIN_HEIGHT(mi)); + InitSuperquadrics(MI_IS_WIREFRAME(mi), 0, + MI_COUNT(mi), MI_CYCLES(mi), spinspeed, sp); + ReshapeSuperquadrics(MI_WIDTH(mi), MI_HEIGHT(mi)); - DisplaySuperquadrics(sp); - glFinish(); - glXSwapBuffers(display, window); -} - -void -refresh_superquadrics(ModeInfo * mi) -{ - /* Nothing happens here */ + DisplaySuperquadrics(sp); + glFinish(); + glXSwapBuffers(display, window); + } else { + MI_CLEARWINDOW(mi); + } } void @@ -731,24 +738,32 @@ draw_superquadrics(ModeInfo * mi) Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); - glXMakeCurrent(display, window, sp->glx_context); + if (!sp->glx_context) + return; + + glXMakeCurrent(display, window, *(sp->glx_context)); NextSuperquadricDisplay(sp); + if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(display, window); } +void +refresh_superquadrics(ModeInfo * mi) +{ + /* Nothing happens here */ +} + void release_superquadrics(ModeInfo * mi) { if (superquadrics != NULL) { - - /* Don't destroy the glXContext. init_GL does that. */ - (void) free((void *) superquadrics); superquadrics = NULL; } + FreeAllGL(mi); }