#include #include #include #include #include #include #include #include #include #define PI ((float)3.14159265358979323846) #define WIDTH 512 #define HEIGHT 512 BOOL fSingle = FALSE; BOOL fRotate = FALSE; BOOL fColor = FALSE; BOOL fNormal = FALSE; BOOL fTexture = FALSE; DWORD dwTotalMillis = 0; int iTotalPoints = 0; #define DEF_PRIM_POINTS 250 #define DEF_PRIMS 250 int iPrims = DEF_PRIMS; int iPrimPoints = DEF_PRIM_POINTS; int iPoints = DEF_PRIMS*DEF_PRIM_POINTS; float fRotAngle = 0.0f; #define MAX_COLOR (3*3) float afColors[MAX_COLOR] = { 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f }; float *pfCurColor; void Init(void) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, 1, .01, 15); gluLookAt(0, 0, 3, 0, 0, 0, 0, 1, 0); glMatrixMode(GL_MODELVIEW); } void ResetTotals(void) { dwTotalMillis = 0; iTotalPoints = 0; } void Redraw(void) { DWORD dwMillis; char szMsg[80]; int iPt, iPrim; float fX, fY, fDx, fDy; dwMillis = GetTickCount(); glClear(GL_COLOR_BUFFER_BIT); if (fRotate) { glLoadIdentity(); glRotatef(fRotAngle, 0.0f, 0.0f, 1.0f); fRotAngle += 2.0f; } fDx = 2.0f/(iPrimPoints-1); fDy = 2.0f/(iPrims-1); fY = -1.0f; pfCurColor = afColors; for (iPrim = 0; iPrim < iPrims; iPrim++) { fX = -1.0f; glBegin(GL_POINTS); for (iPt = 0; iPt < iPrimPoints; iPt++) { if (fColor) { glColor3fv(pfCurColor); pfCurColor += 3; if (pfCurColor >= afColors+MAX_COLOR) { pfCurColor = afColors; } } if (fNormal) { glNormal3f(0.0f, 0.0f, 1.0f); } if (fTexture) { glTexCoord2f(0.5f, 0.5f); } glVertex3f(fX, fY, 0.0f); fX += fDx; } glEnd(); fY += fDy; } if (fSingle) { glFlush(); } else { auxSwapBuffers(); } dwMillis = GetTickCount()-dwMillis; dwTotalMillis += dwMillis; iTotalPoints += iPoints; if (dwTotalMillis > 1000) { sprintf(szMsg, "%.3lf pts/sec", (double)iTotalPoints*1000.0/dwTotalMillis); SetWindowText(auxGetHWND(), szMsg); ResetTotals(); } } void Reshape(GLsizei w, GLsizei h) { glViewport(0, 0, w, h); } void Keyc(void) { ResetTotals(); fColor = !fColor; } void Keyn(void) { ResetTotals(); fNormal = !fNormal; } void KeyP(void) { int iv1[1]; ResetTotals(); glGetIntegerv(GL_CLIP_VOLUME_CLIPPING_HINT_EXT, &iv1[0]); if (iv1[0] == GL_FASTEST) { glHint(GL_CLIP_VOLUME_CLIPPING_HINT_EXT, GL_DONT_CARE); } else { glHint(GL_CLIP_VOLUME_CLIPPING_HINT_EXT, GL_FASTEST); } } void Keyt(void) { ResetTotals(); fTexture = !fTexture; } void __cdecl main(int argc, char **argv) { GLenum eMode; while (--argc > 0) { argv++; if (!strcmp(*argv, "-sb")) { fSingle = TRUE; } else if (!strcmp(*argv, "-rotate")) { fRotate = TRUE; } } auxInitPosition(10, 10, WIDTH, HEIGHT); eMode = AUX_RGB; if (!fSingle) { eMode |= AUX_DOUBLE; } auxInitDisplayMode(eMode); auxInitWindow("Vertex API Timing"); auxReshapeFunc(Reshape); auxIdleFunc(Redraw); auxKeyFunc(AUX_c, Keyc); auxKeyFunc(AUX_n, Keyn); auxKeyFunc(AUX_P, KeyP); auxKeyFunc(AUX_t, Keyt); Init(); auxMainLoop(Redraw); }