ENTRYPOINT void init_slideshow (ModeInfo *mi) { int screen = MI_SCREEN(mi); slideshow_state *ss; int wire = MI_IS_WIREFRAME(mi); if (sss == NULL) { if ((sss = (slideshow_state *) calloc (MI_NUM_SCREENS(mi), sizeof(slideshow_state))) == NULL) return; } ss = &sss[screen]; if ((ss->glx_context = init_GL(mi)) != NULL) { reshape_slideshow (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { MI_CLEARWINDOW(mi); } if (debug_p) fprintf (stderr, "%s: pan: %d; fade: %d; img: %d; zoom: %d%%\n", blurb(), pan_seconds, fade_seconds, image_seconds, zoom); sanity_check(mi); if (debug_p) fprintf (stderr, "%s: pan: %d; fade: %d; img: %d; zoom: %d%%\n\n", blurb(), pan_seconds, fade_seconds, image_seconds, zoom); glDisable (GL_LIGHTING); glDisable (GL_DEPTH_TEST); glDepthMask (GL_FALSE); glEnable (GL_CULL_FACE); glCullFace (GL_BACK); if (! wire) { glEnable (GL_TEXTURE_2D); glShadeModel (GL_SMOOTH); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } if (debug_p) glLineWidth (3); ss->font_data = load_texture_font (mi->dpy, "titleFont"); if (debug_p) hack_resources(); ss->now = double_time(); ss->dawn_of_time = ss->now; ss->prev_frame_time = ss->now; ss->awaiting_first_image_p = True; alloc_image (mi); }
/* Queues a single image for loading. Only load one at a time. The image is done loading when st->img_loader is null and it->loaded_image is a pixmap. */ static void analogtv_load_random_image(struct state *st) { int width=ANALOGTV_PIC_LEN; int height=width*3/4; Pixmap p; if (st->image_loading_p) /* a load is already in progress */ return; st->image_loading_p = True; p = XCreatePixmap(st->dpy, st->window, width, height, st->tv->visdepth); hack_resources(st->dpy); load_image_async (st->tv->xgwa.screen, st->window, p, image_loaded_cb, st); }
ENTRYPOINT void init_photopile (ModeInfo *mi) { int screen = MI_SCREEN(mi); photopile_state *ss; int wire = MI_IS_WIREFRAME(mi); if (sss == NULL) { if ((sss = (photopile_state *) calloc (MI_NUM_SCREENS(mi), sizeof(photopile_state))) == NULL) return; } ss = &sss[screen]; ss->mi = mi; if ((ss->glx_context = init_GL(mi)) != NULL) { reshape_photopile (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */ } else { MI_CLEARWINDOW(mi); } ss->shadow = init_drop_shadow(); ss->texfont = load_texture_font (MI_DISPLAY(mi), "font"); if (debug_p) hack_resources (MI_DISPLAY (mi)); ss->frames = (image *)calloc (MI_COUNT(mi) + 1, sizeof(image)); ss->nframe = 0; if (!wire) { int i; for (i = 0; i < MI_COUNT(mi) + 1; ++i) { glGenTextures (1, &(ss->frames[i].texid)); if (ss->frames[i].texid <= 0) abort(); } } ss->mode = EARLY; load_image(mi); /* start loading the first image */ }
ENTRYPOINT void init_carousel (ModeInfo *mi) { int screen = MI_SCREEN(mi); carousel_state *ss; int wire = MI_IS_WIREFRAME(mi); if (sss == NULL) { if ((sss = (carousel_state *) calloc (MI_NUM_SCREENS(mi), sizeof(carousel_state))) == NULL) return; } ss = &sss[screen]; if ((ss->glx_context = init_GL(mi)) != NULL) { reshape_carousel (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { MI_CLEARWINDOW(mi); } if (!tilt_str || !*tilt_str) ; else if (!strcasecmp (tilt_str, "0")) ; else if (!strcasecmp (tilt_str, "X")) tilt_x_p = 1; else if (!strcasecmp (tilt_str, "Y")) tilt_y_p = 1; else if (!strcasecmp (tilt_str, "XY")) tilt_x_p = tilt_y_p = 1; else { fprintf (stderr, "%s: tilt must be 'X', 'Y', 'XY' or '', not '%s'\n", progname, tilt_str); exit (1); } { double spin_speed = speed * 0.2; /* rotation of tube around axis */ double spin_accel = speed * 0.1; double wander_speed = speed * 0.001; /* tilting of axis */ spin_speed *= 0.9 + frand(0.2); wander_speed *= 0.9 + frand(0.2); ss->rot = make_rotator (spin_speed, spin_speed, spin_speed, spin_accel, wander_speed, True); ss->trackball = gltrackball_init (); } if (strstr ((char *) glGetString(GL_EXTENSIONS), "GL_EXT_texture_filter_anisotropic")) glGetFloatv (GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &ss->anisotropic); else ss->anisotropic = 0.0; glDisable (GL_LIGHTING); glEnable (GL_DEPTH_TEST); glDisable (GL_CULL_FACE); if (! wire) { glShadeModel (GL_SMOOTH); glEnable (GL_LINE_SMOOTH); /* This gives us a transparent diagonal slice through each image! */ /* glEnable (GL_POLYGON_SMOOTH); */ glHint (GL_LINE_SMOOTH_HINT, GL_NICEST); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_ALPHA_TEST); glEnable (GL_POLYGON_OFFSET_FILL); glPolygonOffset (1.0, 1.0); } ss->texfont = load_texture_font (MI_DISPLAY(mi), "font"); if (debug_p) hack_resources (MI_DISPLAY (mi)); ss->nframes = 0; ss->frames_size = 10; ss->frames = (image_frame **) calloc (1, ss->frames_size * sizeof(*ss->frames)); ss->mode = IN; ss->mode_tick = fade_ticks / speed; ss->awaiting_first_images_p = True; }