diff options
| -rw-r--r-- | progs/tests/zreaddraw.c | 116 | 
1 files changed, 116 insertions, 0 deletions
| diff --git a/progs/tests/zreaddraw.c b/progs/tests/zreaddraw.c new file mode 100644 index 0000000000..e2dacbf7f2 --- /dev/null +++ b/progs/tests/zreaddraw.c @@ -0,0 +1,116 @@ +/* + * Test glRead/DrawPixels for GL_DEPTH_COMPONENT, with pixelzoom. + *  + * Brian Paul + * 23 August 2003 + */ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + +static GLint WinWidth = 500, WinHeight = 500; + + +static void Display(void) +{ +   GLfloat depth[100 * 100]; +   GLfloat depth2[400 * 400]; +   GLfloat min, max; +   int i; + +   glClearColor(0.5, 0.5, 0.5, 0); +   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + +   /* draw a sphere */ +   glViewport(0, 0, 100, 100); +   glMatrixMode(GL_PROJECTION); +   glLoadIdentity(); +   glOrtho(-1, 1, -1, 1, -1, 0);  /* clip away back half of sphere */ +   glMatrixMode(GL_MODELVIEW); +   glLoadIdentity(); +   glutSolidSphere(1.0, 20, 10); + +   /* 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]; +   } +   printf("Depth value range: [%f, %f]\n", min, max); + +   /* draw depth image with scaling (into z buffer) */ +   glPixelZoom(4.0, 4.0); +   glWindowPos2i(100, 0); +   glDrawPixels(100, 100, GL_DEPTH_COMPONENT, GL_FLOAT, depth); + +   /* read back scaled depth image */ +   glReadPixels(100, 0, 400, 400, GL_DEPTH_COMPONENT, GL_FLOAT, depth2); +   /* draw as luminance */ +   glPixelZoom(1.0, 1.0); +   glDrawPixels(400, 400, GL_LUMINANCE, GL_FLOAT, depth2); + +   glutSwapBuffers(); +} + + +static void Reshape(int width, int height) +{ +   WinWidth = width; +   WinHeight = height; +   glViewport(0, 0, width, height); +} + + +static void Key(unsigned char key, int x, int y) +{ +   (void) x; +   (void) y; +   switch (key) { +      case 27: +         exit(0); +         break; +   } +   glutPostRedisplay(); +} + + +static void Init(void) +{ +   const GLfloat blue[4] = {.1, .1, 1.0, 0.0}; +   const GLfloat gray[4] = {0.2, 0.2, 0.2, 1.0}; +   const GLfloat white[4] = {1.0, 1.0, 1.0, 1.0}; +   const GLfloat pos[4] = {0, 0, 10, 0}; + +   printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION)); +   printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); + +   glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, blue); +   glLightfv(GL_LIGHT0, GL_AMBIENT, gray); +   glLightfv(GL_LIGHT0, GL_DIFFUSE, white); +   glLightfv(GL_LIGHT0, GL_POSITION, pos); +   glEnable(GL_LIGHTING); +   glEnable(GL_LIGHT0); +   glEnable(GL_DEPTH_TEST); +} + + +int main(int argc, char *argv[]) +{ +   glutInit(&argc, argv); +   glutInitWindowPosition(0, 0); +   glutInitWindowSize(WinWidth, WinHeight); +   glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); +   glutCreateWindow(argv[0]); +   glutReshapeFunc(Reshape); +   glutKeyboardFunc(Key); +   glutDisplayFunc(Display); +   Init(); +   glutMainLoop(); +   return 0; +} | 
