X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fpipes.c;h=9d81200967abf0a7daf049bf97a3b14f805d15da;hb=a445bdd3e3ba4abbee441844b6665b4c3c13d48c;hp=8ee1538940ea4deabb0ea6117f4de3f044accd41;hpb=6bb727f03bff0389fbb1349d7df4c9d8d7532959;p=xscreensaver diff --git a/hacks/glx/pipes.c b/hacks/glx/pipes.c index 8ee15389..9d812009 100644 --- a/hacks/glx/pipes.c +++ b/hacks/glx/pipes.c @@ -33,10 +33,7 @@ static const char sccsid[] = "@(#)pipes.c 4.07 97/11/24 xlockmore"; * Since I'm not a native English speaker, my apologies for any grammatical * mistake. * - * My e-mail addresses are - * - * vianna@cat.cbpf.br - * and + * My e-mail address is * m-vianna@usa.net * Marcelo F. Vianna (Apr-09-1997) * @@ -57,15 +54,16 @@ static const char sccsid[] = "@(#)pipes.c 4.07 97/11/24 xlockmore"; # define PROGCLASS "Pipes" # define HACK_INIT init_pipes # define HACK_DRAW draw_pipes +# define HACK_RESHAPE reshape_pipes # define pipes_opts xlockmore_opts # define DEFAULTS "*delay: 100 \n" \ "*count: 2 \n" \ "*cycles: 5 \n" \ "*size: 500 \n" \ + "*showFPS: False \n" \ "*fisheye: True \n" \ "*tightturns: False \n" \ - "*rotatepipes: True \n" \ - "*noBuffer: True \n" + "*rotatepipes: True \n" # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ @@ -111,18 +109,14 @@ static OptionStruct desc[] = }; ModeSpecOpt pipes_opts = -{7, opts, 4, vars, desc}; +{sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct pipes_description = {"pipes", "init_pipes", "draw_pipes", "release_pipes", -#if defined( MESA ) && defined( SLOW ) "draw_pipes", -#else - "change_pipes", -#endif "change_pipes", NULL, &pipes_opts, - 1000, 2, 5, 500, 1.0, "", + 1000, 2, 5, 500, 4, 1.0, "", "Shows a selfbuilding pipe system", 0, NULL}; #endif @@ -148,9 +142,8 @@ ModStruct pipes_description = /*************************************************************************/ typedef struct { -#if defined( MESA ) && defined( SLOW ) int flip; -#endif + GLint WindH, WindW; int Cells[HCELLS][VCELLS][HCELLS]; int usedcolors[DEFINEDCOLORS]; @@ -406,7 +399,7 @@ MakeValve(ModeInfo * mi, int newdir) glCallList(pp->betweenbolts); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray); glCallList(pp->bolts); - if (!MI_WIN_IS_MONO(mi)) { + if (!MI_IS_MONO(mi)) { if (pp->system_color == MaterialRed) { glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, NRAND(2) ? MaterialYellow : MaterialBlue); } else if (pp->system_color == MaterialBlue) { @@ -494,8 +487,8 @@ MakeShape(ModeInfo * mi, int newdir) } } -static void -reshape(ModeInfo * mi, int width, int height) +void +reshape_pipes(ModeInfo * mi, int width, int height) { pipesstruct *pp = &pipes[MI_SCREEN(mi)]; @@ -505,6 +498,8 @@ reshape(ModeInfo * mi, int width, int height) /*glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0); */ gluPerspective(65.0, (GLfloat) width / (GLfloat) height, 0.1, 20.0); glMatrixMode(GL_MODELVIEW); + + glClear(GL_COLOR_BUFFER_BIT); } static void @@ -563,7 +558,7 @@ pinit(ModeInfo * mi, int zera) pp->counter = 0; pp->turncounter = 0; - if (!MI_WIN_IS_MONO(mi)) { + if (!MI_IS_MONO(mi)) { int collist[DEFINEDCOLORS]; int i, j, lower = 1000; @@ -639,29 +634,32 @@ init_pipes(ModeInfo * mi) pp->window = MI_WINDOW(mi); if ((pp->glx_context = init_GL(mi)) != NULL) { - reshape(mi, MI_WIN_WIDTH(mi), MI_WIN_HEIGHT(mi)); - pp->initial_rotation = -10.0; + reshape_pipes(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); + if (rotatepipes) + pp->initial_rotation = NRAND(180); /* jwz */ + else + pp->initial_rotation = -10.0; pinit(mi, 1); if (factory > 0) { - pp->valve = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_BigValve); - pp->bolts = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_Bolts3D); - pp->betweenbolts = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_PipeBetweenBolts); + pp->valve = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_BigValve); + pp->bolts = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_Bolts3D); + pp->betweenbolts = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_PipeBetweenBolts); - pp->elbowbolts = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_ElbowBolts); - pp->elbowcoins = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_ElbowCoins); + pp->elbowbolts = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_ElbowBolts); + pp->elbowcoins = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_ElbowCoins); - pp->guagehead = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_GuageHead); - pp->guageface = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_GuageFace); - pp->guagedial = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_GuageDial); - pp->guageconnector = BuildLWO(MI_WIN_IS_WIREFRAME(mi), &LWO_GuageConnector); + pp->guagehead = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_GuageHead); + pp->guageface = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_GuageFace); + pp->guagedial = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_GuageDial); + pp->guageconnector = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_GuageConnector); } /* else they are all 0, thanks to calloc(). */ - if (MI_BATCHCOUNT(mi) < 1 || MI_BATCHCOUNT(mi) > NofSysTypes + 1) { + if (MI_COUNT(mi) < 1 || MI_COUNT(mi) > NofSysTypes + 1) { pp->system_type = NRAND(NofSysTypes) + 1; } else { - pp->system_type = MI_BATCHCOUNT(mi); + pp->system_type = MI_COUNT(mi); } if (MI_CYCLES(mi) > 0 && MI_CYCLES(mi) < 11) { @@ -696,20 +694,13 @@ draw_pipes(ModeInfo * mi) if (!pp->glx_context) return; - glXMakeCurrent(display, window, *(pp->glx_context)); - -#if defined( MESA ) && defined( SLOW ) - glDrawBuffer(GL_BACK); -#else - glDrawBuffer(GL_FRONT); -#endif glPushMatrix(); glTranslatef(0.0, 0.0, fisheye ? -3.8 : -4.8); if (rotatepipes) glRotatef(pp->initial_rotation, 0.0, 1.0, 0.0); - if (!MI_WIN_IS_ICONIC(mi)) { + if (!MI_IS_ICONIC(mi)) { /* Width/height ratio handled by gluPerspective() now. */ glScalef(Scale4Window, Scale4Window, Scale4Window); } else { @@ -733,9 +724,7 @@ draw_pipes(ModeInfo * mi) glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0); /* Finish the system with another sphere */ mySphere(0.6); -#if defined( MESA ) && defined( SLOW ) - glXSwapBuffers(display, window); -#endif + glPopMatrix(); /* If the maximum number of system was drawn, restart (clearing the screen), */ @@ -971,11 +960,9 @@ draw_pipes(ModeInfo * mi) glFlush(); -#if defined( MESA ) && defined( SLOW ) - pp->flip = !pp->flip; - if (pp->flip) - glXSwapBuffers(display, window); -#endif + glXSwapBuffers(display, window); + + if (mi->fps_p) do_fps (mi); } void