X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Flavalite.c;h=6f57bf7d0d592284972bff53df522a81c5ddc6b0;hb=39809ded547bdbb08207d3e514950425215b4410;hp=7e422ad6c0918d8452bfde98643cb85ffb9ca152;hpb=d6b0217f2417bd19187f0ebc389d6c5c2233b11c;p=xscreensaver diff --git a/hacks/glx/lavalite.c b/hacks/glx/lavalite.c index 7e422ad6..6f57bf7d 100644 --- a/hacks/glx/lavalite.c +++ b/hacks/glx/lavalite.c @@ -1,6 +1,6 @@ /* lavalite --- 3D Simulation a Lava Lite, written by jwz. * - * This software Copyright (c) 2002-2014 Jamie Zawinski + * This software Copyright (c) 2002-2017 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -70,7 +70,7 @@ "*geometry: 600x900\n" \ "*count: " DEF_COUNT " \n" \ -# define refresh_lavalite 0 +# define free_lavalite 0 # define release_lavalite 0 @@ -300,8 +300,15 @@ ENTRYPOINT void reshape_lavalite (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; + int y = 0; - glViewport (0, 0, (GLint) width, (GLint) height); + if (width > height * 5) { /* tiny window: show middle */ + height = width * 3; + y = -height/2; + h = height / (GLfloat) width; + } + + glViewport (0, y, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); @@ -1274,14 +1281,7 @@ init_lavalite (ModeInfo *mi) lavalite_configuration *bp; int wire = MI_IS_WIREFRAME(mi); - if (!bps) { - bps = (lavalite_configuration *) - calloc (MI_NUM_SCREENS(mi), sizeof (lavalite_configuration)); - if (!bps) { - fprintf(stderr, "%s: out of memory\n", progname); - exit(1); - } - } + MI_INIT (mi, bps); bp = &bps[MI_SCREEN(mi)]; @@ -1375,17 +1375,13 @@ init_lavalite (ModeInfo *mi) False); bp->trackball = gltrackball_init (False); - /* move initial camera position up by around 15 degrees: - in other words, tilt the scene toward the viewer. */ - gltrackball_start (bp->trackball, 50, 50, 100, 100); - gltrackball_track (bp->trackball, 50, 5, 100, 100); - - /* Oh, but if it's the "Giant" model, tilt the scene away: make it - look like we're looking up at it instead of down at it! */ - if (bp->style == GIANT) - gltrackball_track (bp->trackball, 50, -12, 100, 100); - else if (bp->style == ROCKET) /* same for rocket, but not as much */ - gltrackball_track (bp->trackball, 50, -4, 100, 100); + /* Tilt the scene a bit: lean the normal lamps toward the viewer, + and the huge lamps away. */ + gltrackball_reset (bp->trackball, + -0.3 + frand(0.6), + (bp->style == ROCKET || bp->style == GIANT + ? frand (0.2) + : -frand (0.6))); } switch (bp->style) @@ -1496,6 +1492,9 @@ draw_lavalite (ModeInfo *mi) gltrackball_rotate (bp->trackball); /* Apply mouse-based camera position */ + glRotatef (-90, 1, 0, 0); /* Right side up */ + + /* Place the lights relative to the object, before the object has been rotated or wandered within the scene. */ glLightfv(GL_LIGHT0, GL_POSITION, light0_pos);