ftp://ftp.krokus.ru/pub/OpenBSD/distfiles/xscreensaver-4.22.tar.gz
[xscreensaver] / hacks / glx / bubble3d.c
index dd5b68e4af1425be28aa990305fff72a5f7e44e9..3e0062ec7ec95d103fa17afb93b01493027e11aa 100644 (file)
@@ -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 */
@@ -99,6 +99,18 @@ glb_bubble_new(GLfloat x, GLfloat y, GLfloat z, GLfloat scale,
        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) {
@@ -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. */