diff options
Diffstat (limited to 'progs/tests/zreaddraw.c')
| -rw-r--r-- | progs/tests/zreaddraw.c | 84 | 
1 files changed, 71 insertions, 13 deletions
| diff --git a/progs/tests/zreaddraw.c b/progs/tests/zreaddraw.c index 8839e10836..7740695bb6 100644 --- a/progs/tests/zreaddraw.c +++ b/progs/tests/zreaddraw.c @@ -12,14 +12,17 @@  #include <GL/glut.h>  static GLint WinWidth = 500, WinHeight = 500; +static GLboolean Invert = GL_FALSE; +static GLboolean TestPacking = GL_FALSE; +static GLboolean TestList = GL_FALSE;  static void Display(void)  { -   GLfloat depth[100 * 100]; -   GLfloat depth2[400 * 400]; -   GLfloat min, max; -   int i; +   GLfloat depth[100 * 100 * 2]; +   GLfloat depth2[400 * 400]; /* *2 to test pixelstore stuff */ +   GLuint list; +   GLenum depthType = GL_FLOAT;     glClearColor(0.5, 0.5, 0.5, 1.0);     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -35,22 +38,65 @@ static void Display(void)     glLoadIdentity();     glutSolidSphere(1.0, 20, 10); +   if (TestPacking) { +      glPixelStorei(GL_PACK_ROW_LENGTH, 120); +      glPixelStorei(GL_PACK_SKIP_PIXELS, 5); +   } +     /* read the depth image */ -   glReadPixels(0, 0, 100, 100, GL_DEPTH_COMPONENT, GL_FLOAT, depth); -   min = max = depth[0]; -   for (i = 1; i < 100 * 100; i++) { -      if (depth[i] < min) -         min = depth[i]; -      if (depth[i] > max) -         max = depth[i]; +   glReadPixels(0, 0, 100, 100, GL_DEPTH_COMPONENT, depthType, depth); +   if (depthType == GL_FLOAT) { +      GLfloat min, max; +      int i; +      min = max = depth[0]; +      for (i = 1; i < 100 * 100; i++) { +         if (depth[i] < min) +            min = depth[i]; +         if (depth[i] > max) +            max = depth[i]; +      } +      printf("Depth value range: [%f, %f]\n", min, max); +   } + +   /* Draw the Z image as luminance above original rendering */ +   glWindowPos2i(0, 100); +   glDrawPixels(100, 100, GL_LUMINANCE, depthType, depth); + +   if (TestPacking) { +      glPixelStorei(GL_PACK_ROW_LENGTH, 0); +      glPixelStorei(GL_PACK_SKIP_PIXELS, 0); +      glPixelStorei(GL_UNPACK_ROW_LENGTH, 120); +      glPixelStorei(GL_UNPACK_SKIP_PIXELS, 5);     } -   printf("Depth value range: [%f, %f]\n", min, max);     /* draw depth image with scaling (into z buffer) */     glPixelZoom(4.0, 4.0);     glColor4f(1, 0, 0, 0);     glWindowPos2i(100, 0); -   glDrawPixels(100, 100, GL_DEPTH_COMPONENT, GL_FLOAT, depth); +   if (Invert) { +      glPixelTransferf(GL_DEPTH_SCALE, -1.0); +      glPixelTransferf(GL_DEPTH_BIAS, 1.0); +   } +   if (TestList) { +      list = glGenLists(1); +      glNewList(list, GL_COMPILE); +      glDrawPixels(100, 100, GL_DEPTH_COMPONENT, depthType, depth); +      glEndList(); +      glCallList(list); +      glDeleteLists(list, 1); +   } +   else { +      glDrawPixels(100, 100, GL_DEPTH_COMPONENT, depthType, depth); +   } +   if (Invert) { +      glPixelTransferf(GL_DEPTH_SCALE, 1.0); +      glPixelTransferf(GL_DEPTH_BIAS, 0.0); +   } + +   if (TestPacking) { +      glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); +      glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); +   }     glDisable(GL_DEPTH_TEST); @@ -58,6 +104,7 @@ static void Display(void)     glReadPixels(100, 0, 400, 400, GL_DEPTH_COMPONENT, GL_FLOAT, depth2);     /* draw as luminance */     glPixelZoom(1.0, 1.0); +   glWindowPos2i(100, 0);     glDrawPixels(400, 400, GL_LUMINANCE, GL_FLOAT, depth2);     glutSwapBuffers(); @@ -77,6 +124,17 @@ static void Key(unsigned char key, int x, int y)     (void) x;     (void) y;     switch (key) { +      case 'i': +         Invert = !Invert; +         break; +      case 'p': +         TestPacking = !TestPacking; +         printf("Test pixel pack/unpack: %d\n", TestPacking); +         break; +      case 'l': +         TestList = !TestList; +         printf("Test dlist: %d\n", TestList); +         break;        case 27:           exit(0);           break; | 
