#include #include #include #include #define WINDSIZEX 100 #define WINDSIZEY 100 void init (void) { int i; GLfloat white[] = { 1.0, 1.0, 1.0, 1.0 }; glClearColor (0.0, 0.0, 0.0, 1.0); glColor4fv (white); glDisable (GL_DITHER); } static void test (void) { GLfloat r1[4], r2[4]; int texName; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glGenTextures (1, &texName); glBindTexture (GL_TEXTURE_1D, texName); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER_ARB); glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER_ARB); glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB); glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL); glEnable (GL_DEPTH_TEST); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glDisable (GL_TEXTURE_1D); glColor3f (0.0, 0.0, 1.0); glBegin (GL_QUAD_STRIP); glVertex3f (10.0, 20.0, -0.25); glVertex3f (10.0, 40.0, -0.25); glVertex3f (20.0, 20.0, -0.25); glVertex3f (20.0, 40.0, -0.25); glEnd (); glBegin (GL_QUAD_STRIP); glVertex3f (40.0, 20.0, -0.5); glVertex3f (40.0, 40.0, -0.5); glVertex3f (50.0, 20.0, -0.5); glVertex3f (50.0, 40.0, -0.5); glEnd (); glCopyTexImage1D (GL_TEXTURE_1D, 0, GL_DEPTH_COMPONENT, 0, 30, 64, 0); glTexParameteri (GL_TEXTURE_1D, GL_DEPTH_TEXTURE_MODE_ARB, GL_LUMINANCE); glEnable (GL_TEXTURE_1D); glDisable (GL_DEPTH_TEST); glClear (GL_COLOR_BUFFER_BIT); glClear (GL_DEPTH_BUFFER_BIT); glColor3f (1.0, 0.0, 0.0); GLfloat z = 0.3; glBegin (GL_QUAD_STRIP); glTexCoord4f (0.0, 0.0, z, 1.0); glVertex2f (0.0, 0.0); glTexCoord4f (0.0, 1.0, z, 1.0); glVertex2f (0.0, 63.0); glTexCoord4f (1.0, 0.0, z, 1.0); glVertex2f (63.0, 00.0); glTexCoord4f (1.0, 1.0, z, 1.0); glVertex2f (63.0, 63.0); glEnd (); glReadPixels (15, 30, 1, 1, GL_RGBA, GL_FLOAT, &r1); glReadPixels (45, 30, 1, 1, GL_RGBA, GL_FLOAT, &r2); printf ("(15, 30) = (%f, %f, %f, %f), should be (0.000000, 0.000000, 0.000000, 1.000000)\n", r1[0], r1[1], r1[2], r1[3]); printf ("(45, 30) = (%f, %f, %f, %f), should be (1.000000, 1.000000, 1.000000, 1.000000)\n", r2[0], r2[1], r2[2], r2[3]); glDisable (GL_TEXTURE_1D); glDisable (GL_DEPTH_TEST); glFlush (); } void display (void) { glMatrixMode (GL_PROJECTION); glLoadIdentity (); glOrtho (0, 63, 0, 63, 0, 1.0); glViewport (0, 0, 63, 63); test (); } main (int argc, char **argv) { glutInit (&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowSize (WINDSIZEX, WINDSIZEY); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc (display); glutMainLoop (); return 0; }