X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fcubenetic.c;h=5e8c3a042309503b90aa649667ea448a279d98f2;hb=f8cf5ac7b2f53510f80a0eaf286a25298be17bfe;hp=694c147b55b3b4f29869ddd274e4808def5706ee;hpb=6b1c86cf395f59389e4ece4ea8f4bea2c332745b;p=xscreensaver diff --git a/hacks/glx/cubenetic.c b/hacks/glx/cubenetic.c index 694c147b..5e8c3a04 100644 --- a/hacks/glx/cubenetic.c +++ b/hacks/glx/cubenetic.c @@ -32,7 +32,7 @@ #define DEF_WANDER "True" #define DEF_TEXTURE "True" -#define DEF_WAVE_COUNT "3" +#define DEF_WAVES "3" #define DEF_WAVE_SPEED "80" #define DEF_WAVE_RADIUS "512" @@ -67,6 +67,7 @@ typedef struct { GLuint cube_list; GLuint texture_id; + int cube_polys; int ncubes; cube *cubes; waves *waves; @@ -107,7 +108,7 @@ static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_String}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, - {&wave_count, "waves", "Waves", DEF_WAVE_COUNT, t_Int}, + {&wave_count, "waves", "Waves", DEF_WAVES, t_Int}, {&wave_speed, "waveSpeed", "WaveSpeed", DEF_WAVE_SPEED, t_Int}, {&wave_radius,"waveRadius","WaveRadius", DEF_WAVE_RADIUS,t_Int}, }; @@ -115,15 +116,17 @@ static argtype vars[] = { ENTRYPOINT ModeSpecOpt cube_opts = {countof(opts), opts, countof(vars), vars, NULL}; -static void +static int unit_cube (Bool wire) { + int polys = 0; glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* front */ glNormal3f (0, 0, 1); glTexCoord2f(1, 0); glVertex3f ( 0.5, -0.5, 0.5); glTexCoord2f(0, 0); glVertex3f ( 0.5, 0.5, 0.5); glTexCoord2f(0, 1); glVertex3f (-0.5, 0.5, 0.5); glTexCoord2f(1, 1); glVertex3f (-0.5, -0.5, 0.5); + polys++; glEnd(); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* back */ @@ -132,6 +135,7 @@ unit_cube (Bool wire) glTexCoord2f(0, 1); glVertex3f (-0.5, 0.5, -0.5); glTexCoord2f(1, 1); glVertex3f ( 0.5, 0.5, -0.5); glTexCoord2f(1, 0); glVertex3f ( 0.5, -0.5, -0.5); + polys++; glEnd(); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* left */ @@ -140,6 +144,7 @@ unit_cube (Bool wire) glTexCoord2f(1, 0); glVertex3f (-0.5, 0.5, -0.5); glTexCoord2f(0, 0); glVertex3f (-0.5, -0.5, -0.5); glTexCoord2f(0, 1); glVertex3f (-0.5, -0.5, 0.5); + polys++; glEnd(); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* right */ @@ -148,9 +153,10 @@ unit_cube (Bool wire) glTexCoord2f(1, 0); glVertex3f ( 0.5, 0.5, -0.5); glTexCoord2f(0, 0); glVertex3f ( 0.5, 0.5, 0.5); glTexCoord2f(0, 1); glVertex3f ( 0.5, -0.5, 0.5); + polys++; glEnd(); - if (wire) return; + if (wire) return polys; glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* top */ glNormal3f (0, 1, 0); @@ -158,6 +164,7 @@ unit_cube (Bool wire) glTexCoord2f(0, 1); glVertex3f ( 0.5, 0.5, -0.5); glTexCoord2f(1, 1); glVertex3f (-0.5, 0.5, -0.5); glTexCoord2f(1, 0); glVertex3f (-0.5, 0.5, 0.5); + polys++; glEnd(); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* bottom */ @@ -166,7 +173,9 @@ unit_cube (Bool wire) glTexCoord2f(0, 0); glVertex3f (-0.5, -0.5, -0.5); glTexCoord2f(0, 1); glVertex3f ( 0.5, -0.5, -0.5); glTexCoord2f(1, 1); glVertex3f ( 0.5, -0.5, 0.5); + polys++; glEnd(); + return polys; } @@ -298,8 +307,6 @@ init_texture (ModeInfo *mi) glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexGeni (GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni (GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); check_gl_error("texture initialization"); @@ -492,7 +499,7 @@ init_cube (ModeInfo *mi) cc->cube_list = glGenLists (1); glNewList (cc->cube_list, GL_COMPILE); - unit_cube (wire); + cc->cube_polys = unit_cube (wire); glEndList (); } @@ -531,6 +538,7 @@ draw_cube (ModeInfo *mi) if (!cc->glx_context) return; + mi->polygon_count = 0; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(cc->glx_context)); glShadeModel(GL_FLAT); @@ -578,6 +586,7 @@ draw_cube (ModeInfo *mi) glScalef (cube->w, cube->h, cube->d); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); glCallList (cc->cube_list); + mi->polygon_count += cc->cube_polys; glPopMatrix (); }