X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fbubble3d.c;h=9f2da1572ce33d3e8d5efa0b3e5ee646e8c784de;hb=49f5b54f312fe4ac2e9bc47581a72451bd0e8439;hp=dd5b68e4af1425be28aa990305fff72a5f7e44e9;hpb=df7adbee81405e2849728a24b498ad2117784b1f;p=xscreensaver diff --git a/hacks/glx/bubble3d.c b/hacks/glx/bubble3d.c index dd5b68e4..9f2da157 100644 --- a/hacks/glx/bubble3d.c +++ b/hacks/glx/bubble3d.c @@ -1,9 +1,8 @@ /* -*- Mode: C; tab-width: 4 -*- */ /* bubble3d.c - 3D bubbles */ -#if !defined( lint ) && !defined( SABER ) +#if 0 static const char sccsid[] = "@(#)bubble3d.c 4.11 98/06/16 xlockmore"; - #endif /*- @@ -48,6 +47,7 @@ typedef struct bubble { GLfloat *nudge_angle_incr; /* Amount by which we increase each nudge * angle in each frame. */ + GLfloat color[4]; } bubble; /* Should be taken care of already... but just in case */ @@ -84,7 +84,7 @@ max(GLfloat a, GLfloat b) /* Create a new bubble. */ void * -glb_bubble_new(GLfloat x, GLfloat y, GLfloat z, GLfloat scale, +glb_bubble_new(glb_data *d, GLfloat x, GLfloat y, GLfloat z, GLfloat scale, GLfloat y_incr, GLfloat scale_incr) { int i, j; @@ -92,13 +92,25 @@ glb_bubble_new(GLfloat x, GLfloat y, GLfloat z, GLfloat scale, /* GLfloat axes [glb_config.nr_nudge_axes][3]; */ GLfloat axes[5][3]; /* HARD CODED for SunCC */ int nr_vertices; - glb_vertex *vertices = glb_sphere_get_vertices(&nr_vertices); + glb_vertex *vertices = glb_sphere_get_vertices(d, &nr_vertices); bubble *b = (bubble *) malloc(sizeof *b); if (b == 0) return 0; + if (glb_config.bubble_colour[0] == -1.0) { + b->color[0] = ((float) (NRAND(100)) / 100.0); + b->color[1] = ((float) (NRAND(100)) / 100.0); + b->color[2] = ((float) (NRAND(100)) / 100.0); + } else { + b->color[0] = glb_config.bubble_colour[0]; + b->color[1] = glb_config.bubble_colour[1]; + b->color[2] = glb_config.bubble_colour[2]; + } + b->color[3] = glb_config.bubble_colour[3]; + + b->contributions = (GLfloat *) malloc(sizeof (GLfloat) * nr_vertices * glb_config.nr_nudge_axes); if (b->contributions == 0) { @@ -203,14 +215,14 @@ glb_bubble_step(void *bb) /* Draw a bubble. */ void -glb_bubble_draw(void *bb) +glb_bubble_draw(glb_data *d, void *bb) { int i, j; bubble *b = (bubble *) bb; int nr_vertices; - glb_vertex *vertices = glb_sphere_get_vertices(&nr_vertices); + glb_vertex *vertices = glb_sphere_get_vertices(d, &nr_vertices); int nr_triangles; - glb_triangle *triangles = glb_sphere_get_triangles(&nr_triangles); + glb_triangle *triangles = glb_sphere_get_triangles(d, &nr_triangles); glb_vertex *new_vertices; new_vertices = (glb_vertex *) malloc(sizeof (glb_vertex) * nr_vertices); @@ -241,6 +253,9 @@ glb_bubble_draw(void *bb) /* Draw the bubble. */ glBegin(GL_TRIANGLES); + + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, b->color); + for (i = 0; i < nr_triangles; ++i) { glNormal3fv(new_vertices[triangles[i][0]]); glVertex3fv(new_vertices[triangles[i][0]]); @@ -252,6 +267,7 @@ glb_bubble_draw(void *bb) glEnd(); glPopMatrix(); (void) free((void *) new_vertices); + glb_config.polygon_count += nr_triangles; } /* Return y value. */