diff options
Diffstat (limited to 'progs/tests/mipmap_limits.c')
| -rw-r--r-- | progs/tests/mipmap_limits.c | 237 | 
1 files changed, 127 insertions, 110 deletions
| diff --git a/progs/tests/mipmap_limits.c b/progs/tests/mipmap_limits.c index 5b899cd155..9418e90981 100644 --- a/progs/tests/mipmap_limits.c +++ b/progs/tests/mipmap_limits.c @@ -77,15 +77,16 @@ InitValues(void)  } -static void MakeImage(int level, int width, int height, const GLubyte color[4]) +static void +MakeImage(int level, int width, int height, const GLubyte color[4])  {     const int makeStripes = 0; -   GLubyte img[512*512*3]; +   GLubyte img[512 * 512 * 3];     int i, j;     for (i = 0; i < height; i++) {        for (j = 0; j < width; j++) {           int k = (i * width + j) * 3; -         int p = (i/8) & makeStripes; +         int p = (i / 8) & makeStripes;           if (p == 0) {              img[k + 0] = color[0];              img[k + 1] = color[1]; @@ -104,7 +105,8 @@ static void MakeImage(int level, int width, int height, const GLubyte color[4])  } -static void makeImages(int image) +static void +makeImages(int image)  {  #define WIDTH 512  #define HEIGHT 512 @@ -121,19 +123,20 @@ static void makeImages(int image)        if (width != WIDTH || height != HEIGHT) {           GLubyte *newImage = malloc(WIDTH * HEIGHT * 4);           gluScaleImage(format, width, height, GL_UNSIGNED_BYTE, image, -               WIDTH, HEIGHT, GL_UNSIGNED_BYTE, newImage); +                       WIDTH, HEIGHT, GL_UNSIGNED_BYTE, newImage);           free(image);           image = newImage;        }        printf("Using GL_SGIS_generate_mipmap\n");        glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE);        glTexImage2D(GL_TEXTURE_2D, 0, format, WIDTH, HEIGHT, 0, -            format, GL_UNSIGNED_BYTE, image); +                   format, GL_UNSIGNED_BYTE, image);        glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_FALSE);        free(image);        /* make sure mipmap was really generated correctly */ -      width = WIDTH; height = HEIGHT; +      width = WIDTH; +      height = HEIGHT;        for (i = 0; i < 10; i++) {           GLint w, h;           glGetTexLevelParameteriv(GL_TEXTURE_2D, i, GL_TEXTURE_WIDTH, &w); @@ -142,18 +145,19 @@ static void makeImages(int image)           width /= 2;           height /= 2;        } -   } else { +   } +   else {        static const GLubyte colors[10][3] = { -         {128, 128, 128 }, -         { 0, 255, 255 }, -         { 255, 255, 0 }, -         { 255, 0, 255 }, -         { 255, 0, 0 }, -         { 0, 255, 0 }, -         { 0, 0, 255 }, -         { 0, 255, 255 }, -         { 255, 255, 0 }, -         { 255, 255, 255 } +         {128, 128, 128}, +         {0, 255, 255}, +         {255, 255, 0}, +         {255, 0, 255}, +         {255, 0, 0}, +         {0, 255, 0}, +         {0, 0, 255}, +         {0, 255, 255}, +         {255, 255, 0}, +         {255, 255, 255}        };        int i, sz = 512; @@ -165,7 +169,8 @@ static void makeImages(int image)     }  } -static void myinit(void) +static void +myinit(void)  {     InitValues(); @@ -191,14 +196,16 @@ static void myinit(void)     glEnable(GL_TEXTURE_2D);  } -static void display(void) +static void +display(void)  {     GLfloat tcm = 1.0;     glBindTexture(GL_TEXTURE_2D, texCurrent); -   printf("BASE_LEVEL=%d  MAX_LEVEL=%d  MIN_LOD=%.2g  MAX_LOD=%.2g  Bias=%.2g  Filter=%s\n", -         BaseLevel, MaxLevel, MinLod, MaxLod, LodBias, -         NearestFilter ? "NEAREST" : "LINEAR"); +   printf +      ("BASE_LEVEL=%d  MAX_LEVEL=%d  MIN_LOD=%.2g  MAX_LOD=%.2g  Bias=%.2g  Filter=%s\n", +       BaseLevel, MaxLevel, MinLod, MaxLod, LodBias, +       NearestFilter ? "NEAREST" : "LINEAR");     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, BaseLevel);     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, MaxLevel); @@ -208,103 +215,44 @@ static void display(void)     if (NearestFilter) {        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, -            GL_NEAREST_MIPMAP_NEAREST); +                      GL_NEAREST_MIPMAP_NEAREST);     }     else {        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, -            GL_LINEAR_MIPMAP_LINEAR); +                      GL_LINEAR_MIPMAP_LINEAR);     }     glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, LodBias);     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);     glBegin(GL_QUADS); -   glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); -   glTexCoord2f(0.0, tcm); glVertex3f(-2.0, 1.0, 0.0); -   glTexCoord2f(tcm * 3000.0, tcm); glVertex3f(3000.0, 1.0, -6000.0); -   glTexCoord2f(tcm * 3000.0, 0.0); glVertex3f(3000.0, -1.0, -6000.0); +   glTexCoord2f(0.0, 0.0); +   glVertex3f(-2.0, -1.0, 0.0); +   glTexCoord2f(0.0, tcm); +   glVertex3f(-2.0, 1.0, 0.0); +   glTexCoord2f(tcm * 3000.0, tcm); +   glVertex3f(3000.0, 1.0, -6000.0); +   glTexCoord2f(tcm * 3000.0, 0.0); +   glVertex3f(3000.0, -1.0, -6000.0);     glEnd();     glFlush();  } -static void myReshape(int w, int h) +static void +myReshape(int w, int h)  {     glViewport(0, 0, w, h);     glMatrixMode(GL_PROJECTION);     glLoadIdentity(); -   gluPerspective(60.0, 1.0*(GLfloat)w/(GLfloat)h, 1.0, 30000.0); +   gluPerspective(60.0, 1.0 * (GLfloat) w / (GLfloat) h, 1.0, 30000.0);     glMatrixMode(GL_MODELVIEW);     glLoadIdentity();  } -static void -key(unsigned char k, int x, int y) -{ -  (void) x; -  (void) y; -  switch (k) { -  case 'b': -     BaseLevel--; -     if (BaseLevel < 0) -        BaseLevel = 0; -     break; -  case 'B': -     BaseLevel++; -     if (BaseLevel > 10) -        BaseLevel = 10; -     break; -  case 'm': -     MaxLevel--; -     if (MaxLevel < 0) -        MaxLevel = 0; -     break; -  case 'M': -     MaxLevel++; -     if (MaxLevel > 10) -        MaxLevel = 10; -     break; -  case 'l': -     LodBias -= 0.25; -     break; -  case 'L': -     LodBias += 0.25; -     break; -  case 'n': -     MinLod -= 0.25; -     break; -  case 'N': -     MinLod += 0.25; -     break; -  case 'x': -     MaxLod -= 0.25; -     break; -  case 'X': -     MaxLod += 0.25; -     break; -  case 'f': -     NearestFilter = !NearestFilter; -     break; -  case 't': -     if (texCurrent == texColor) -        texCurrent = texImage; -     else -        texCurrent = texColor; -     break; -  case ' ': -     InitValues(); -     break; -  case 27:  /* Escape */ -    exit(0); -    break; -  default: -    return; -  } -  glutPostRedisplay(); -} - -static void usage(void) +static void +usage(void)  {     printf("usage:\n");     printf("  b/B    decrease/increase GL_TEXTURE_BASE_LEVEL\n"); @@ -317,19 +265,88 @@ static void usage(void)     printf("  SPACE  reset values\n");  } +static void +key(unsigned char k, int x, int y) +{ +   (void) x; +   (void) y; +   switch (k) { +   case 'b': +      BaseLevel--; +      if (BaseLevel < 0) +         BaseLevel = 0; +      break; +   case 'B': +      BaseLevel++; +      if (BaseLevel > 10) +         BaseLevel = 10; +      break; +   case 'm': +      MaxLevel--; +      if (MaxLevel < 0) +         MaxLevel = 0; +      break; +   case 'M': +      MaxLevel++; +      if (MaxLevel > 10) +         MaxLevel = 10; +      break; +   case 'l': +      LodBias -= 0.25; +      break; +   case 'L': +      LodBias += 0.25; +      break; +   case 'n': +      MinLod -= 0.25; +      break; +   case 'N': +      MinLod += 0.25; +      break; +   case 'x': +      MaxLod -= 0.25; +      break; +   case 'X': +      MaxLod += 0.25; +      break; +   case 'f': +      NearestFilter = !NearestFilter; +      break; +   case 't': +      if (texCurrent == texColor) +         texCurrent = texImage; +      else +         texCurrent = texColor; +      break; +   case ' ': +      InitValues(); +      /* fall-through */ +   case 'u': +      usage(); +      break; +   case 27:                    /* Escape */ +      exit(0); +      break; +   default: +      return; +   } +   glutPostRedisplay(); +} + -int main(int argc, char** argv) +int +main(int argc, char **argv)  { -    glutInit(&argc, argv); -    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); -    glutInitWindowSize (600, 600); -    glutCreateWindow (argv[0]); -    glewInit(); -    myinit(); -    glutReshapeFunc (myReshape); -    glutDisplayFunc(display); -    glutKeyboardFunc(key); -    usage(); -    glutMainLoop(); -    return 0;             /* ANSI C requires main to return int. */ +   glutInit(&argc, argv); +   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); +   glutInitWindowSize(600, 600); +   glutCreateWindow(argv[0]); +   glewInit(); +   myinit(); +   glutReshapeFunc(myReshape); +   glutDisplayFunc(display); +   glutKeyboardFunc(key); +   usage(); +   glutMainLoop(); +   return 0;                    /* ANSI C requires main to return int. */  } | 
