GLXContext *glx_context;
GLuint listobjects;
GLuint gllists[3];
+ int list_polys[3];
Window window;
BOOL stop;
char *tex1;
/*
* draw bottom
*/
-static void drawfilledbox(boxedstruct *boxed, int wire)
+static int drawfilledbox(boxedstruct *boxed, int wire)
{
/* draws texture filled box,
top is drawn using the entire texture,
the sides are drawn using the edge of the texture
*/
+ int polys = 0;
/* front */
glBegin(wire ? GL_LINE_LOOP : GL_QUADS);
glVertex3f(1.0,-1.0,1.0);
glTexCoord2f(0,1);
glVertex3f(-1.0,-1.0,1.0);
+ polys++;
/* rear */
glTexCoord2f(0,1);
glVertex3f(1.0,1.0,-1.0);
glVertex3f(-1.0,-1.0,-1.0);
glTexCoord2f(0,1);
glVertex3f(1.0,-1.0,-1.0);
+ polys++;
/* left */
glTexCoord2f(1,1);
glVertex3f(-1.0,1.0,1.0);
glVertex3f(-1.0,-1.0,-1.0);
glTexCoord2f(0,1);
glVertex3f(-1.0,1.0,-1.0);
+ polys++;
/* right */
glTexCoord2f(0,1);
glVertex3f(1.0,1.0,1.0);
glVertex3f(1.0,-1.0,-1.0);
glTexCoord2f(0,1);
glVertex3f(1.0,-1.0,1.0);
+ polys++;
/* top */
glTexCoord2f(0.0,0.0);
glVertex3f(-1.0,1.0,1.0);
glVertex3f(1.0,1.0,-1.0);
glTexCoord2f(1.0,0.0);
glVertex3f(1.0,1.0,1.0);
+ polys++;
/* bottom */
glTexCoord2f(0,0);
glVertex3f(-1.0,-1.0,1.0);
glVertex3f(1.0,-1.0,-1.0);
glTexCoord2f(1,0);
glVertex3f(1.0,-1.0,1.0);
+ polys++;
glEnd();
+
+ return polys;
}
/*
* Draw a box made of lines
*/
-static void drawbox(boxedstruct *boxed)
+static int drawbox(boxedstruct *boxed)
{
+ int polys = 0;
/* top */
glBegin(GL_LINE_STRIP);
glVertex3f(-1.0,1.0,1.0);
- glVertex3f(-1.0,1.0,-1.0);
- glVertex3f(1.0,1.0,-1.0);
- glVertex3f(1.0,1.0,1.0);
- glVertex3f(-1.0,1.0,1.0);
+ glVertex3f(-1.0,1.0,-1.0); polys++;
+ glVertex3f(1.0,1.0,-1.0); polys++;
+ glVertex3f(1.0,1.0,1.0); polys++;
+ glVertex3f(-1.0,1.0,1.0); polys++;
glEnd();
/* bottom */
glBegin(GL_LINE_STRIP);
glVertex3f(-1.0,-1.0,1.0);
- glVertex3f(1.0,-1.0,1.0);
- glVertex3f(1.0,-1.0,-1.0);
- glVertex3f(-1.0,-1.0,-1.0);
- glVertex3f(-1.0,-1.0,1.0);
+ glVertex3f(1.0,-1.0,1.0); polys++;
+ glVertex3f(1.0,-1.0,-1.0); polys++;
+ glVertex3f(-1.0,-1.0,-1.0); polys++;
+ glVertex3f(-1.0,-1.0,1.0); polys++;
glEnd();
/* connect top & bottom */
glBegin(GL_LINES);
glVertex3f(-1.0,1.0,1.0);
- glVertex3f(-1.0,-1.0,1.0);
+ glVertex3f(-1.0,-1.0,1.0); polys++;
glVertex3f(1.0,1.0,1.0);
- glVertex3f(1.0,-1.0,1.0);
+ glVertex3f(1.0,-1.0,1.0); polys++;
glVertex3f(1.0,1.0,-1.0);
- glVertex3f(1.0,-1.0,-1.0);
+ glVertex3f(1.0,-1.0,-1.0); polys++;
glVertex3f(-1.0,1.0,-1.0);
- glVertex3f(-1.0,-1.0,-1.0);
+ glVertex3f(-1.0,-1.0,-1.0); polys++;
glEnd();
+ return polys;
}
/*
* Draw ball
*/
-static void drawball(boxedstruct *gp, ball *b, int wire)
+static int drawball(boxedstruct *gp, ball *b, int wire)
{
+ int polys = 0;
int i,pos,cnt;
GLint *spherei = gp->spherei;
vectorf *spherev = gp->spherev;
glNormal3f(spherev[spherei[pos+0]].x,spherev[spherei[pos+0]].y,spherev[spherei[pos+0]].z);
glVertex3f(spherev[spherei[pos+0]].x,spherev[spherei[pos+0]].y,spherev[spherei[pos+0]].z);
glNormal3f(spherev[spherei[pos+1]].x,spherev[spherei[pos+1]].y,spherev[spherei[pos+1]].z);
+ gp->list_polys[GLL_BALL]++;
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();
}
glEndList();
gp->gllists[GLL_BALL] = 1;
} else {
glCallList(gp->listobjects + GLL_BALL);
+ polys += gp->list_polys[GLL_BALL];
}
glPopMatrix();
+ return polys;
}
/*
* Draw all triangles in triman
*/
-static void drawtriman(triman *t, int wire)
+static int drawtriman(triman *t, int wire)
{
+ int polys = 0;
int i,pos;
vectorf *spherev = t->vertices;
GLfloat col[3];
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);
+ polys++;
glEnd();
glPopMatrix();
}
glPopMatrix();
+ return polys;
}
/*
* draw floor pattern
*/
-static void drawpattern(boxedstruct *gp)
+static int drawpattern(boxedstruct *gp)
{
+ int polys = 0;
if (!gp->gllists[GLL_PATTERN]) {
glNewList(gp->listobjects + GLL_PATTERN, GL_COMPILE);
glBegin(GL_LINE_STRIP);
glVertex3f(-25.0f, 0.0f, 35.0f);
- glVertex3f(-15.0f, 0.0f, 35.0f);
- glVertex3f(-5.0f, 0.0f, 25.0f);
- glVertex3f(5.0f, 0.0f, 25.0f);
- glVertex3f(15.0f, 0.0f, 35.0f);
- glVertex3f(25.0f, 0.0f, 35.0f);
- glVertex3f(35.0f, 0.0f, 25.0f);
- glVertex3f(35.0f, 0.0f, 15.0f);
- glVertex3f(25.0f, 0.0f, 5.0f);
- glVertex3f(25.0f, 0.0f, -5.0f);
- glVertex3f(35.0f, 0.0f, -15.0f);
- glVertex3f(35.0f, 0.0f, -25.0f);
- glVertex3f(25.0f, 0.0f, -35.0f);
- glVertex3f(15.0f, 0.0f,-35.0f);
- glVertex3f(5.0f, 0.0f, -25.0f);
- glVertex3f(-5.0f, 0.0f, -25.0f);
- glVertex3f(-15.0f, 0.0f,-35.0f);
- glVertex3f(-25.0f, 0.0f,-35.0f);
- glVertex3f(-35.0f, 0.0f, -25.0f);
- glVertex3f(-35.0f, 0.0f, -15.0f);
- glVertex3f(-25.0f, 0.0f, -5.0f);
- glVertex3f(-25.0f, 0.0f, 5.0f);
- glVertex3f(-35.0f, 0.0f, 15.0f);
- glVertex3f(-35.0f, 0.0f, 25.0f);
- glVertex3f(-25.0f, 0.0f, 35.0f);
+ glVertex3f(-15.0f, 0.0f, 35.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-5.0f, 0.0f, 25.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(5.0f, 0.0f, 25.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(15.0f, 0.0f, 35.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(25.0f, 0.0f, 35.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(35.0f, 0.0f, 25.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(35.0f, 0.0f, 15.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(25.0f, 0.0f, 5.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(25.0f, 0.0f, -5.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(35.0f, 0.0f, -15.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(35.0f, 0.0f, -25.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(25.0f, 0.0f, -35.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(15.0f, 0.0f,-35.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(5.0f, 0.0f, -25.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-5.0f, 0.0f, -25.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-15.0f, 0.0f,-35.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-25.0f, 0.0f,-35.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-35.0f, 0.0f, -25.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-35.0f, 0.0f, -15.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-25.0f, 0.0f, -5.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-25.0f, 0.0f, 5.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-35.0f, 0.0f, 15.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-35.0f, 0.0f, 25.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-25.0f, 0.0f, 35.0f); gp->list_polys[GLL_PATTERN]++;
glEnd();
glBegin(GL_LINE_STRIP);
glVertex3f(-5.0f, 0.0f, 15.0f);
- glVertex3f(5.0f, 0.0f, 15.0f);
- glVertex3f(15.0f, 0.0f, 5.0f);
- glVertex3f(15.0f, 0.0f, -5.0f);
- glVertex3f(5.0f, 0.0f, -15.0f);
- glVertex3f(-5.0f, 0.0f, -15.0f);
- glVertex3f(-15.0f, 0.0f, -5.0f);
- glVertex3f(-15.0f, 0.0f, 5.0f);
- glVertex3f(-5.0f, 0.0f, 15.0f);
+ glVertex3f(5.0f, 0.0f, 15.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(15.0f, 0.0f, 5.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(15.0f, 0.0f, -5.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(5.0f, 0.0f, -15.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-5.0f, 0.0f, -15.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-15.0f, 0.0f, -5.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-15.0f, 0.0f, 5.0f); gp->list_polys[GLL_PATTERN]++;
+ glVertex3f(-5.0f, 0.0f, 15.0f); gp->list_polys[GLL_PATTERN]++;
glEnd();
glEndList();
gp->gllists[GLL_PATTERN] = 1;
} else {
glCallList(gp->listobjects + GLL_PATTERN);
- }
+ polys += gp->list_polys[GLL_PATTERN];
+ }
+ return polys;
}
GLfloat l1_diffuse[] = {0.5, 0.5, 0.5, 1.0};
GLfloat l1_position[] = {0.0, 1.0, 0.0, 0.0}; /* w = 0 -> directional light */
+ mi->polygon_count = 0;
+
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
+ glRotatef(current_device_rotation(), 0, 0, 1);
+
gp->tic += 0.01f;
gp->camtic += 0.01f + 0.01f * sin(gp->tic * speed);
glColor3f(1.0,1.0,1.0);
glScalef(20.0,0.25,20.0);
glTranslatef(0.0,2.0,0.0);
- drawfilledbox(gp, wire);
+ mi->polygon_count += drawfilledbox(gp, wire);
glPopMatrix();
glDisable(GL_TEXTURE_2D);
glColor3f(0.2,0.5,0.2);
glScalef(20.0,20.0,0.25);
glTranslatef(0.0,1.0,81.0);
- drawbox(gp);
+ mi->polygon_count += drawbox(gp);
glPopMatrix();
glPushMatrix();
glColor3f(0.2,0.5,0.2);
glScalef(20.0,20.0,0.25);
glTranslatef(0.0,1.0,-81.0);
- drawbox(gp);
+ mi->polygon_count += drawbox(gp);
glPopMatrix();
glPushMatrix();
glColor3f(0.2,0.5,0.2);
glScalef(.25,20.0,20.0);
glTranslatef(-81.0,1.0,0.0);
- drawbox(gp);
+ mi->polygon_count += drawbox(gp);
glPopMatrix();
glPushMatrix();
glColor3f(0.2,0.5,0.2);
glScalef(.25,20.0,20.0);
glTranslatef(81.0,1.0,0.0);
- drawbox(gp);
+ mi->polygon_count += drawbox(gp);
glPopMatrix();
if (!wire) {
updatetris(&gp->tman[i]);
}
glDisable(GL_CULL_FACE);
- drawtriman(&gp->tman[i], wire);
+ mi->polygon_count += drawtriman(&gp->tman[i], wire);
if (!wire) glEnable(GL_CULL_FACE);
} else {
- drawball(gp, &gp->bman.balls[i], wire);
+ mi->polygon_count += drawball(gp, &gp->bman.balls[i], wire);
}
}
glShadeModel(GL_SMOOTH);
glClearDepth(1.0);
- glClearColor(0.0,0.05,0.1,0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
/* Load configuration */
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
clear_gl_error();
+#if 0
i = gluBuild2DMipmaps(GL_TEXTURE_2D, 3, 256, 256,
GL_RGB, GL_UNSIGNED_BYTE, gp->tex1);
if (i)
exit (1);
}
check_gl_error("mipmapping");
+#else
+ glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0,
+ GL_RGB, GL_UNSIGNED_BYTE,
+ gp->tex1);
+ check_gl_error("texture");
+#endif
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);