216 lines
3.8 KiB
C
216 lines
3.8 KiB
C
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <math.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
|
|
#include <windows.h>
|
|
#include <gl\gl.h>
|
|
#include <gl\glu.h>
|
|
#include <gl\glaux.h>
|
|
|
|
#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);
|
|
}
|