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); }
static void check_fps (ModeInfo *mi) { #ifndef HAVE_JWXYZ /* always assume Cocoa and mobile are fast enough */ slideshow_state *ss = &sss[MI_SCREEN(mi)]; double start_time, end_time, wall_elapsed, frame_duration, fps; int i; start_time = ss->now; end_time = double_time(); frame_duration = end_time - start_time; /* time spent drawing this frame */ ss->time_elapsed += frame_duration; /* time spent drawing all frames */ ss->frames_elapsed++; wall_elapsed = end_time - ss->dawn_of_time; fps = ss->frames_elapsed / ss->time_elapsed; ss->theoretical_fps = fps; if (ss->checked_fps_p) return; if (wall_elapsed <= 8) /* too early to be sure */ return; ss->checked_fps_p = True; if (fps >= fps_cutoff) { if (debug_p) fprintf (stderr, "%s: %.1f fps is fast enough (with %d frames in %.1f secs)\n", blurb(), fps, ss->frames_elapsed, wall_elapsed); return; } fprintf (stderr, "%s: only %.1f fps! Turning off pan/fade to compensate...\n", blurb(), fps); zoom = 100; fade_seconds = 0; sanity_check (mi); for (i = 0; i < ss->nsprites; i++) { sprite *sp = ss->sprites[i]; randomize_sprite (mi, sp); sp->state = FULL; } ss->redisplay_needed_p = True; /* Need this in case zoom changed. */ reshape_slideshow (mi, mi->xgwa.width, mi->xgwa.height); #endif /* HAVE_JWXYZ */ }