#ifdef STANDALONE /* xscreensaver mode */
#define DEFAULTS "*delay: 10000 \n" \
"*showFPS: False \n" \
+ "*suppressRotationAnimation: True\n" \
-# define refresh_atunnel 0
+# define release_atunnel 0
# define atunnel_handle_event 0
#define MODE_atunnel
# include "xlockmore.h" /* from the xscreensaver distribution */
#define countof(x) (sizeof((x))/sizeof((*x)))
#define DEF_LIGHT "True"
-#define DEF_WIRE "False"
+#define DEF_WIRE "False"
#define DEF_TEXTURE "True"
static Bool do_light;
#ifdef USE_MODULES
ModStruct atunnel_description =
-{"atunnel", "init_atunnel", "draw_atunnel", "release_atunnel",
- "draw_atunnel", "init_atunnel", NULL, &atunnel_opts,
+{"atunnel", "init_atunnel", "draw_atunnel", NULL,
+ "draw_atunnel", "init_atunnel", "free_atunnel", &atunnel_opts,
1000, 1, 2, 1, 4, 1.0, "",
"OpenGL advanced tunnel screensaver", 0, NULL};
#endif
GLfloat light_position[] = {0.0, 0.0, 1.0, 0.0};
GLfloat fogColor[4] = {0.8, 0.8, 0.8, 1.0};
- glClearColor(0, 0, 0, 0);
if (do_texture)
{
glGenTextures(MAX_TEXTURE, sa->texture);
LoadTexture(mi, texture5,5);
glEnable(GL_TEXTURE_2D);
}
- sa->ts = InitTunnel();
+ sa->ts = atunnel_InitTunnel();
/* Set lighting parameters */
if (do_light)
glEnable(GL_LIGHTING);
}
+
+# ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */
+ do_wire = 0;
+# endif
+
if (do_wire) {
glDisable(GL_NORMALIZE);
glDisable(GL_CULL_FACE);
ENTRYPOINT void
reshape_atunnel(ModeInfo *mi, int width, int height)
{
- float a;
+ double h = (GLfloat) height / (GLfloat) width;
+ int y = 0;
- glViewport(0, 0, width, height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- a = (float)width/(float)height;
- glFrustum(-0.1*a, 0.1*a, -0.1, 0.1, 0.1, 10);
- glMatrixMode(GL_MODELVIEW);
+ if (width > height * 2) { /* tiny window: show middle */
+ height = width;
+ y = -height/2;
+ h = height / (GLfloat) width;
+ }
+
+ glViewport(0, y, width, height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glFrustum(-0.1*(1/h), 0.1*(1/h), -0.1, 0.1, 0.1, 10);
+ glMatrixMode(GL_MODELVIEW);
}
/* draw the screensaver once */
glLoadIdentity();
- DrawTunnel(sa->ts, do_texture, do_light, sa->texture);
- SplashScreen(sa->ts, do_wire, do_texture, do_light);
+ atunnel_DrawTunnel(sa->ts, do_texture, do_light, sa->texture);
+ atunnel_SplashScreen(sa->ts, do_wire, do_texture, do_light);
glFlush();
/* manage framerate display */
int screen = MI_SCREEN(mi);
atunnelstruct *sa;
- if (Atunnel == NULL) {
- if ((Atunnel = (atunnelstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (atunnelstruct))) == NULL)
- return;
- }
+ MI_INIT(mi, Atunnel);
sa = &Atunnel[screen];
sa->window = MI_WINDOW(mi);
}
/* all sorts of nice cleanup code should go here! */
-ENTRYPOINT void release_atunnel(ModeInfo * mi)
+ENTRYPOINT void free_atunnel(ModeInfo * mi)
{
- int screen;
- if (Atunnel != NULL) {
- for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) {
- atunnelstruct *sa = &Atunnel[screen];
- FreeTunnel(sa->ts);
- }
- (void) free((void *) Atunnel);
- Atunnel = NULL;
- }
- FreeAllGL(mi);
+#if 0
+ atunnelstruct *sa = &Atunnel[MI_SCREEN(mi)];
+ FreeTunnel(sa->ts);
+#endif
}
XSCREENSAVER_MODULE ("Atunnel", atunnel)