Преглед изворни кода

Added -perf option to measure frame rate. This is useful for measuring

Mesa in a more environment-independent way.
tags/mesa_4_1
Karl Schultz пре 23 година
родитељ
комит
17642eddf4
1 измењених фајлова са 37 додато и 8 уклоњено
  1. 37
    8
      progs/demos/osdemo.c

+ 37
- 8
progs/demos/osdemo.c Прегледај датотеку

@@ -1,4 +1,4 @@
/* $Id: osdemo.c,v 1.7 2001/09/24 15:29:27 kschultz Exp $ */
/* $Id: osdemo.c,v 1.8 2002/04/05 17:40:20 kschultz Exp $ */

/*
* Demo of off-screen Mesa rendering
@@ -14,6 +14,11 @@
*
* PPM output provided by Joerg Schmalzl.
* ASCII PPM output added by Brian Paul.
*
* Usage: osdemo [-perf] [filename]
*
* -perf: Redraws the image 1000 times, displaying the FPS every 5 secs.
* filename: file to store the TGA or PPM output
*/


@@ -29,7 +34,9 @@
#define WIDTH 400
#define HEIGHT 400


static GLint T0 = 0;
static GLint Frames = 0;
static int perf = 0;

static void render_image( void )
{
@@ -76,7 +83,7 @@ static void render_image( void )
glPopMatrix();

#ifdef GL_HP_occlusion_test
{
if (perf == 0) {
GLboolean bRet;
glDepthMask(GL_FALSE);
glColorMask(GL_FALSE,GL_FALSE,GL_FALSE,GL_FALSE);
@@ -105,7 +112,7 @@ static void render_image( void )
glPopMatrix();

#ifdef GL_HP_occlusion_test
{
if (perf == 0){
GLboolean bRet;

glDepthMask(GL_FALSE);
@@ -130,6 +137,18 @@ static void render_image( void )
#endif

glPopMatrix();

Frames++;
if (perf) {
GLint t = glutGet(GLUT_ELAPSED_TIME);
if (t - T0 >= 5000) {
GLfloat seconds = (t - T0) / 1000.0;
GLfloat fps = Frames / seconds;
printf("%d frames in %6.3f seconds = %6.3f FPS\n", Frames, seconds, fps);
T0 = t;
Frames = 0;
}
}
}


@@ -224,6 +243,8 @@ write_ppm(const char *filename, const GLubyte *buffer, int width, int height)
int main( int argc, char *argv[] )
{
void *buffer;
int i;
char *filename = NULL;

/* Create an RGBA-mode context */
#if OSMESA_MAJOR_VERSION * 100 + OSMESA_MINOR_VERSION >= 305
@@ -237,6 +258,11 @@ int main( int argc, char *argv[] )
return 0;
}

for ( i=1; i<argc; i++ ) {
if (argv[i][0] != '-') filename = argv[i];
if (strcmp(argv[i], "-perf")==0) perf = 1;
}

/* Allocate the image buffer */
buffer = malloc( WIDTH * HEIGHT * 4 * sizeof(GLubyte) );
if (!buffer) {
@@ -256,16 +282,19 @@ int main( int argc, char *argv[] )
glGetIntegerv(GL_DEPTH_BITS, &z);
glGetIntegerv(GL_STENCIL_BITS, &s);
glGetIntegerv(GL_ACCUM_RED_BITS, &a);
printf("%d %d %d\n", z, s, a);
printf("Depth=%d Stencil=%d Accum=%d\n", z, s, a);
}

render_image();
if (perf)
for(i=0; i< 1000; i++)
render_image();

if (argc>1) {
if (filename != NULL) {
#ifdef SAVE_TARGA
write_targa(argv[1], buffer, WIDTH, HEIGHT);
write_targa(filename, buffer, WIDTH, HEIGHT);
#else
write_ppm(argv[1], buffer, WIDTH, HEIGHT);
write_ppm(filename, buffer, WIDTH, HEIGHT);
#endif
}
else {

Loading…
Откажи
Сачувај