X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Fglx%2Ftimetunnel.c;h=e670341e17f33431bf1c103183280a45a1c0255d;hp=abf0e132d5a8dcc1b254defb03aed5db8a3ce137;hb=49f5b54f312fe4ac2e9bc47581a72451bd0e8439;hpb=ccb7f4903325f92555a9722bba74b58346654ba0 diff --git a/hacks/glx/timetunnel.c b/hacks/glx/timetunnel.c index abf0e132..e670341e 100644 --- a/hacks/glx/timetunnel.c +++ b/hacks/glx/timetunnel.c @@ -10,31 +10,8 @@ * implied warranty. */ -#include #include /* for log2 */ -extern XtAppContext app; - -#define PROGCLASS "TimeTunnel" -#define HACK_INIT init_tunnel -#define HACK_DRAW draw_tunnel -#define HACK_RESHAPE reshape_tunnel -#define HACK_HANDLE_EVENT tunnel_handle_event -#define EVENT_MASK PointerMotionMask -#define sws_opts xlockmore_opts - -#define DEF_START "0.00" -#define DEF_DILATE "1.00" -#define DEF_END "27.79" -#define DEF_LOCKLOGO "False" -#define DEF_TUNONLY "False" -#define DEF_REVERSE "False" -#define DEF_FOG "True" -#define DEF_TEXTURE "True" -#define MAX_TEXTURE 10 -#define CYL_LEN 14.0 -#define DIAMOND_LEN 10.0 - #define DEFAULTS "*delay: 30000 \n" \ "*count: 30 \n" \ "*showFPS: False \n" \ @@ -44,6 +21,8 @@ extern XtAppContext app; +# define refresh_tunnel 0 +# define release_tunnel 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -51,11 +30,22 @@ extern XtAppContext app; #include "colors.h" #include "rotator.h" #include "gltrackball.h" -#include -#include /* for time based animations */ + + +#define DEF_START "0.00" +#define DEF_DILATE "1.00" +#define DEF_END "27.79" +#define DEF_LOCKLOGO "False" +#define DEF_DRAWLOGO "True" +#define DEF_REVERSE "False" +#define DEF_FOG "True" +#define DEF_TEXTURE "True" +#define MAX_TEXTURE 10 +#define CYL_LEN 14.0 +#define DIAMOND_LEN 10.0 static float start, end, dilate; -static Bool do_texture, tunonly, wire, reverse, do_fog; +static Bool do_texture, drawlogo, wire, reverse, do_fog; #ifdef GET_SUED_BY_THE_BBC static Bool locklogo; #endif @@ -68,7 +58,8 @@ static XrmOptionDescRec opts[] = { #ifdef GET_SUED_BY_THE_BBC {"-locklogo" , ".locklogo", XrmoptionNoArg, "true" }, #endif - {"-tunonly" , ".tunonly", XrmoptionNoArg, "true" }, + {"-logo" , ".drawlogo", XrmoptionNoArg, "true" }, + {"+logo" , ".drawlogo", XrmoptionNoArg, "false" }, {"-reverse" , ".reverse", XrmoptionNoArg, "true" }, {"-fog" , ".fog", XrmoptionNoArg, "false" }, }; @@ -81,30 +72,28 @@ static argtype vars[] = { #ifdef GET_SUED_BY_THE_BBC {&locklogo, "locklogo", "LockLogo", DEF_LOCKLOGO , t_Bool}, #endif - {&tunonly, "tunonly", "TunnelOnly", DEF_TUNONLY , t_Bool}, + {&drawlogo, "drawlogo", "DrawLogo", DEF_DRAWLOGO , t_Bool}, {&reverse, "reverse", "Reverse", DEF_REVERSE , t_Bool}, {&do_fog, "fog", "Fog", DEF_FOG , t_Bool}, }; -ModeSpecOpt sws_opts = {countof(opts), opts, countof(vars), vars, NULL}; +ENTRYPOINT ModeSpecOpt tunnel_opts = {countof(opts), opts, countof(vars), vars, NULL}; #include "xpm-ximage.h" -#include "../../utils/images/logo-180.xpm" -#include "../images/tunnelstar.xpm" -#include "../images/timetunnel0.xpm" -#include "../images/timetunnel1.xpm" -#include "../images/timetunnel2.xpm" +#include "images/logo-180.xpm" +#include "images/tunnelstar.xpm" +#include "images/timetunnel0.xpm" +#include "images/timetunnel1.xpm" +#include "images/timetunnel2.xpm" #ifdef GET_SUED_BY_THE_BBC -# include "../images/tardis.xpm" -# include "../images/whologo.xpm" -# include "../images/whohead1.xpm" -/* #include "../images/whohead_psy.xpm" */ +# include "images/tardis.xpm" +# include "images/whologo.xpm" +# include "images/whohead1.xpm" +/* #include "images/whohead_psy.xpm" */ # endif /* GET_SUED_BY_THE_BBC */ #ifdef USE_GL /* whole file */ -#include - /* ANIMATION CONTROLS */ /* an effect is a collection of floating point variables that vary with time. A knot is a timestamp with an array of floats. State is the current values of the floats. @@ -139,8 +128,9 @@ typedef struct { static tunnel_configuration *tconf = NULL; /* allocate memory and populate effect with knot data */ -void init_effect(effect_t *e, int numk, int kwidth, - float dir, float *data ) { +static void init_effect(effect_t *e, int numk, int kwidth, + float dir, float *data ) +{ int i, j; e->numknots = numk; @@ -157,7 +147,7 @@ void init_effect(effect_t *e, int numk, int kwidth, Knots are linerally interpolated to yield float values, depending on knot width. knot format is [time, data, data, data...]. Data can be alpha, zvalue, etc. */ -void init_effects(effect_t *e, int effectnum) +static void init_effects(effect_t *e, int effectnum) { /* effect 1: wall tunnel. percent closed */ float e1d[6][2] = @@ -307,7 +297,8 @@ void init_effects(effect_t *e, int effectnum) /* set fog parameters, controlled by effect */ -void update_fog(float color, float density, float start, float end) { +static void update_fog(float color, float density, float start, float end) +{ GLfloat col[4]; col[0] = col[1] = col[2] = color; @@ -323,7 +314,8 @@ void update_fog(float color, float density, float start, float end) { /* set effect's floating point data values by linearally interpolating between two knots whose times bound the current time: eff_time */ -void update_knots(effect_t *e, float eff_time) { +static void update_knots(effect_t *e, float eff_time) +{ int i, j; float timedelta, lowknot, highknot, *curknot, *nextknot; @@ -351,7 +343,7 @@ void update_knots(effect_t *e, float eff_time) { /* Window management, etc */ -void +ENTRYPOINT void reshape_tunnel (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; @@ -374,7 +366,7 @@ reshape_tunnel (ModeInfo *mi, int width, int height) -Bool +ENTRYPOINT Bool tunnel_handle_event (ModeInfo *mi, XEvent *event) { tunnel_configuration *tc = &tconf[MI_SCREEN(mi)]; @@ -414,7 +406,7 @@ tunnel_handle_event (ModeInfo *mi, XEvent *event) return False; } -void setTexParams(void) +static void setTexParams(void) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); @@ -423,13 +415,13 @@ void setTexParams(void) glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); } -void update_animation(tunnel_configuration *tc) { +static void update_animation(tunnel_configuration *tc) { /* time based, of course*/ /* shift texture based on elapsed time since previous call*/ - static struct timeval tv; - static struct timezone tz; - static int elapsed_usecs, elapsed_secs, i; + struct timeval tv; + struct timezone tz; + int elapsed_usecs, elapsed_secs, i; float computed_timeshift; /* get new animation time */ @@ -484,7 +476,7 @@ void update_animation(tunnel_configuration *tc) { /* draw a textured(tex) quad at a certain depth (z), and certain alpha (alpha), with aspect ratio (aspect), and blending mode (blend_mode) of either adding or subtracting. if alpha is zero or less, nothing happens */ -void draw_sign(ModeInfo *mi, tunnel_configuration *tc, float z, float alpha, float aspect, +static void draw_sign(ModeInfo *mi, tunnel_configuration *tc, float z, float alpha, float aspect, GLuint tex, int blend_mode) { @@ -535,7 +527,7 @@ void draw_sign(ModeInfo *mi, tunnel_configuration *tc, float z, float alpha, fl /* draw a time tunnel. used for both cylender and diamond tunnels. uses texture shifter (indexed by shiftnum) to simulate motion. tunnel does not move, and is acutally a display list. if alpha = 0, skip */ -void draw_cyl(ModeInfo *mi, tunnel_configuration *tc, float alpha, int texnum, int listnum, int shiftnum) +static void draw_cyl(ModeInfo *mi, tunnel_configuration *tc, float alpha, int texnum, int listnum, int shiftnum) { if (alpha > 0.0) { if (listnum == tc->diamondlist) @@ -568,7 +560,7 @@ void draw_cyl(ModeInfo *mi, tunnel_configuration *tc, float alpha, int texnum, i grows to outline of tardis. percent is how complete tardis outline is. cap is to draw cap for nice fog effects */ -void make_wall_tunnel(ModeInfo *mi, tunnel_configuration *tc, float percent, float cap) +static void make_wall_tunnel(ModeInfo *mi, tunnel_configuration *tc, float percent, float cap) { /* tardis is about 2x1, so wrap tex around, starting at the base*/ /* tex coords are: @@ -616,7 +608,7 @@ l| |r glBindTexture(GL_TEXTURE_2D, tc->texture_binds[0]); #endif glColor3f(1.0, 1.0, 0.0); - if (cap > 0.0 && percent > 0.0 && ! tunonly && do_fog) { + if (cap > 0.0 && percent > 0.0 && drawlogo && do_fog) { mi->polygon_count += 6; glBegin(GL_TRIANGLE_FAN); glVertex3f(0.0, 0.0, zdepth); @@ -827,7 +819,7 @@ l| |r /* wraps an int to between min and max. Kind of like the remainder when devided by (max - min). Used to create torus mapping on square array */ -int wrapVal(int val, int min, int max) +static int wrapVal(int val, int min, int max) { int ret; @@ -851,9 +843,9 @@ int wrapVal(int val, int min, int max) */ -float mylog2(float x) { return ( log(x) / log(2));} +static float mylog2(float x) { return ( log(x) / log(2));} -static void LoadTexture(ModeInfo * mi, char **fn, unsigned int texbind, int blur, float bw_color, Bool anegative, Bool onealpha) +static void LoadTexture(ModeInfo * mi, char **fn, GLuint texbind, int blur, float bw_color, Bool anegative, Bool onealpha) { /* looping and temporary array index variables */ int ix, iy, bx, by, indx, indy, boxsize, cchan, tmpidx, dtaidx; @@ -865,7 +857,7 @@ static void LoadTexture(ModeInfo * mi, char **fn, unsigned int texbind, int blur XImage *teximage; /* Texture data */ - rescale = FALSE; + rescale = False; boxsize = 2; boxdiv = 1.0 / ( boxsize * 2.0 + 1.0) / ( boxsize * 2.0 + 1.0); @@ -883,14 +875,14 @@ static void LoadTexture(ModeInfo * mi, char **fn, unsigned int texbind, int blur tmpfa = mylog2((float) teximage->width); bx = 2 << (int) (tmpfa -1); if (bx != teximage->width) { - rescale = TRUE; + rescale = True; if ((tmpfa - (int) tmpfa) > 0.5849) bx = bx * 2; } tmpfa = mylog2((float) teximage->height); by = 2 << (int) (tmpfa - 1); if (by != teximage->height) { - rescale = TRUE; + rescale = True; if ((tmpfa - (int) tmpfa) > 0.5849) by = by * 2; } @@ -996,7 +988,8 @@ static void LoadTexture(ModeInfo * mi, char **fn, unsigned int texbind, int blur /* creates cylender for time tunnel. sides, zmin, zmax, rad(ius) obvious. stretch scales texture coords; makes tunnel go slower the larger it is. not drawn, but put into display list. */ -void makecyl(int sides, float zmin, float zmax, float rad, float stretch) { +static void makecyl(int sides, float zmin, float zmax, float rad, float stretch) +{ int i; float theta; @@ -1033,7 +1026,7 @@ void makecyl(int sides, float zmin, float zmax, float rad, float stretch) { glEnd(); } -void +ENTRYPOINT void init_tunnel (ModeInfo *mi) { int i; @@ -1080,7 +1073,7 @@ init_tunnel (ModeInfo *mi) if (wire) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - do_texture = FALSE; + do_texture = False; } if (do_texture) @@ -1088,27 +1081,27 @@ init_tunnel (ModeInfo *mi) glGenTextures(MAX_TEXTURE, tc->texture_binds); /*LoadTexture(*mi, **fn, texbind, bluralpha, bw_color, anegative, onealpha)*/ - LoadTexture(mi, timetunnel0_xpm, tc->texture_binds[0], 0, 0.0, FALSE, FALSE); - LoadTexture(mi, timetunnel1_xpm, tc->texture_binds[2], 0, 0.0, FALSE, FALSE); - LoadTexture(mi, timetunnel2_xpm, tc->texture_binds[5], 0, 0.0, FALSE, FALSE); - LoadTexture(mi, tunnelstar_xpm, tc->texture_binds[4], 0, 0.0, FALSE, FALSE); + LoadTexture(mi, timetunnel0_xpm, tc->texture_binds[0], 0, 0.0, False, False); + LoadTexture(mi, timetunnel1_xpm, tc->texture_binds[2], 0, 0.0, False, False); + LoadTexture(mi, timetunnel2_xpm, tc->texture_binds[5], 0, 0.0, False, False); + LoadTexture(mi, tunnelstar_xpm, tc->texture_binds[4], 0, 0.0, False, False); # ifdef GET_SUED_BY_THE_BBC if (locklogo) { # endif /* GET_SUED_BY_THE_BBC */ - LoadTexture(mi, (char **) logo_180_xpm, tc->texture_binds[3], 0,0.0, FALSE, FALSE); + LoadTexture(mi, (char **) logo_180_xpm, tc->texture_binds[3], 0,0.0, False, False); tc->texture_binds[1] = tc->texture_binds[3]; tc->texture_binds[6] = tc->texture_binds[3]; tc->texture_binds[8] = tc->texture_binds[3]; /* negative */ - LoadTexture(mi, (char **) logo_180_xpm, tc->texture_binds[9], 2,1.0, TRUE, TRUE); + LoadTexture(mi, (char **) logo_180_xpm, tc->texture_binds[9], 2,1.0, True, True); # ifdef GET_SUED_BY_THE_BBC } else { - LoadTexture(mi, whologo_xpm, tc->texture_binds[3], 0,0.0, FALSE, FALSE); - LoadTexture(mi, tardis_xpm, tc->texture_binds[1], 0, 0.0 ,FALSE, FALSE); - LoadTexture(mi, whohead1_xpm, tc->texture_binds[6], 0, 1.0, FALSE, FALSE); - /* LoadTexture(mi, whohead_psy_xpm, tc->texture_binds[8], 1, 0.7, FALSE, FALSE); */ + LoadTexture(mi, whologo_xpm, tc->texture_binds[3], 0,0.0, False, False); + LoadTexture(mi, tardis_xpm, tc->texture_binds[1], 0, 0.0 ,False, False); + LoadTexture(mi, whohead1_xpm, tc->texture_binds[6], 0, 1.0, False, False); + /* LoadTexture(mi, whohead_psy_xpm, tc->texture_binds[8], 1, 0.7, False, False); */ /* negative */ - LoadTexture(mi, whohead1_xpm, tc->texture_binds[9], 2, 1.0, TRUE, TRUE); + LoadTexture(mi, whohead1_xpm, tc->texture_binds[9], 2, 1.0, True, True); } # endif /* GET_SUED_BY_THE_BBC */ glEnable(GL_TEXTURE_2D); @@ -1146,7 +1139,7 @@ init_tunnel (ModeInfo *mi) } -void +ENTRYPOINT void draw_tunnel (ModeInfo *mi) { tunnel_configuration *tc = &tconf[MI_SCREEN(mi)]; @@ -1157,6 +1150,8 @@ draw_tunnel (ModeInfo *mi) if (!tc->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(tc->glx_context)); + glShadeModel(GL_SMOOTH); glEnable(GL_NORMALIZE); @@ -1188,7 +1183,7 @@ draw_tunnel (ModeInfo *mi) glEnable(GL_BLEND); draw_cyl(mi, tc, tc->effects[6].state[0], 5, tc->diamondlist, 2); - if (! tunonly) + if (drawlogo) draw_sign(mi, tc,tc->effects[12].state[0], tc->effects[12].state[1], 1.0 / 1.33, 9, 1); glDisable(GL_BLEND); /* then tardis tunnel */ @@ -1200,13 +1195,13 @@ draw_tunnel (ModeInfo *mi) /*void draw_sign(mi, tc,z,alpha,aspect,tex,blendmode)*/ /* tardis */ - if (! tunonly) + if (drawlogo) draw_sign(mi, tc, tc->effects[2].state[0], tc->effects[2].state[1], 2.0, 1, 0); /* logo */ - if (! tunonly) + if (drawlogo) draw_sign(mi, tc, tc->effects[5].state[0], tc->effects[5].state[1], 1.0, 3, 0); /*who head brite*/ - if (! tunonly) + if (drawlogo) draw_sign(mi, tc,1.0, tc->effects[10].state[0], 1.0 / 1.33, 6, 2); /*who head psychadelic REMOVED*/ /* draw_sign(mi, tc,1.0, tc->effects[11].state[0], 1.0 / 1.33, 8, 0); */ @@ -1216,7 +1211,7 @@ draw_tunnel (ModeInfo *mi) draw_sign(mi, tc, tc->effects[8].state[0], tc->effects[8].state[0], 1.0, 4, 1); /* normal head */ - if (! tunonly) + if (drawlogo) draw_sign(mi, tc,1.0, tc->effects[9].state[0], 1.0 / 1.33, 6, 0); /* --- end composite image assembly --- */ @@ -1231,4 +1226,6 @@ draw_tunnel (ModeInfo *mi) glXSwapBuffers(dpy, window); } +XSCREENSAVER_MODULE_2 ("TimeTunnel", timetunnel, tunnel) + #endif /* USE_GL */