X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fboxed.c;h=a7f07d4c313473f489d7bf3cebcde02f6cf99ae1;hb=refs%2Fheads%2Fmaster2;hp=d85d420910d7bbfcf38627e6b6ae7e759ef97f69;hpb=8afc01a67be4fbf3f1cc0fce9adf01b5289a21c6;p=xscreensaver diff --git a/hacks/glx/boxed.c b/hacks/glx/boxed.c index d85d4209..a7f07d4c 100644 --- a/hacks/glx/boxed.c +++ b/hacks/glx/boxed.c @@ -831,20 +831,22 @@ static int drawball(boxedstruct *gp, ball *b, int wire) if (!gp->gllists[GLL_BALL]) { glNewList(gp->listobjects + GLL_BALL,GL_COMPILE); + glBegin(wire ? GL_LINES : GL_TRIANGLES); cnt = SPHERE_INDICES/3; for (i=0; ilist_polys[GLL_BALL]++; glVertex3f(spherev[spherei[pos+1]].x,spherev[spherei[pos+1]].y,spherev[spherei[pos+1]].z); + if (wire) + glVertex3f(spherev[spherei[pos+1]].x,spherev[spherei[pos+1]].y,spherev[spherei[pos+1]].z); glNormal3f(spherev[spherei[pos+2]].x,spherev[spherei[pos+2]].y,spherev[spherei[pos+2]].z); glVertex3f(spherev[spherei[pos+2]].x,spherev[spherei[pos+2]].y,spherev[spherei[pos+2]].z); gp->list_polys[GLL_BALL]++; - glEnd(); } + glEnd(); glEndList(); gp->gllists[GLL_BALL] = 1; } else { @@ -856,6 +858,27 @@ static int drawball(boxedstruct *gp, ball *b, int wire) return polys; } + +/* + * Draw a single triangle + */ +static void drawtri(triman *t, int wire, int i) +{ + const vectorf *spherev = t->vertices + i*3; + const vectorf *loc = &t->tris[i].loc; + + glNormal3f(t->normals[i].x,t->normals[i].y,t->normals[i].z); + glVertex3f(spherev[0].x+loc->x,spherev[0].y+loc->y,spherev[0].z+loc->z); + glVertex3f(spherev[1].x+loc->x,spherev[1].y+loc->y,spherev[1].z+loc->z); + if (wire) + glVertex3f(spherev[1].x+loc->x,spherev[1].y+loc->y,spherev[1].z+loc->z); + glVertex3f(spherev[2].x+loc->x,spherev[2].y+loc->y,spherev[2].z+loc->z); + if (wire) { + glVertex3f(spherev[2].x+loc->x,spherev[2].y+loc->y,spherev[2].z+loc->z); + glVertex3f(spherev[0].x+loc->x,spherev[0].y+loc->y,spherev[0].z+loc->z); + } +} + /* * Draw all triangles in triman @@ -863,8 +886,7 @@ static int drawball(boxedstruct *gp, ball *b, int wire) static int drawtriman(triman *t, int wire) { int polys = 0; - int i,pos; - vectorf *spherev = t->vertices; + int i; GLfloat col[3]; glPushMatrix(); @@ -877,6 +899,7 @@ static int drawtriman(triman *t, int wire) col[1] *= 0.3; col[2] *= 0.3; glMaterialfv(GL_FRONT, GL_EMISSION,col); + glBegin(wire ? GL_LINES : GL_TRIANGLES); for (i=0; inum_tri; i++) { if (t->tris[i].gone > 3) { continue; } @@ -891,17 +914,8 @@ static int drawtriman(triman *t, int wire) col[2] *= 0.8; glMaterialfv(GL_FRONT, GL_EMISSION,col); - pos = i*3; - glPushMatrix(); - glTranslatef(t->tris[i].loc.x,t->tris[i].loc.y,t->tris[i].loc.z); - glBegin(wire ? GL_LINE_LOOP : GL_TRIANGLES); - glNormal3f(t->normals[i].x,t->normals[i].y,t->normals[i].z); - glVertex3f(spherev[pos+0].x,spherev[pos+0].y,spherev[pos+0].z); - glVertex3f(spherev[pos+1].x,spherev[pos+1].y,spherev[pos+1].z); - glVertex3f(spherev[pos+2].x,spherev[pos+2].y,spherev[pos+2].z); + drawtri(t, wire, i); polys++; - glEnd(); - glPopMatrix(); glColor3f(t->color.x,t->color.y,t->color.z); col[0] = t->color.x; @@ -917,19 +931,11 @@ static int drawtriman(triman *t, int wire) continue; } - pos = i*3; - glPushMatrix(); - glTranslatef(t->tris[i].loc.x,t->tris[i].loc.y,t->tris[i].loc.z); - glBegin(wire ? GL_LINE_LOOP : GL_TRIANGLES); - glNormal3f(t->normals[i].x,t->normals[i].y,t->normals[i].z); - glVertex3f(spherev[pos+0].x,spherev[pos+0].y,spherev[pos+0].z); - glVertex3f(spherev[pos+1].x,spherev[pos+1].y,spherev[pos+1].z); - glVertex3f(spherev[pos+2].x,spherev[pos+2].y,spherev[pos+2].z); + drawtri(t, wire, i); polys++; - glEnd(); - glPopMatrix(); - } - glPopMatrix(); + } + glEnd(); + glPopMatrix(); return polys; } @@ -1023,7 +1029,15 @@ static void draw(ModeInfo * mi) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); - glRotatef(current_device_rotation(), 0, 0, 1); +# ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ + { + GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); + int o = (int) current_device_rotation(); + if (o != 0 && o != 180 && o != -180) + glScalef (1/h, 1/h, 1/h); + glRotatef(o, 0, 0, 1); + } +# endif gp->tic += 0.01f; gp->camtic += 0.01f + 0.01f * sin(gp->tic * speed);