OSDN Git Service

Merge remote branch 'origin/master' into lp-binning
[android-x86/external-mesa.git] / progs / trivial / tri-z-eq.c
1 /*
2  * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc.
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and
5  * its documentation for any purpose is hereby granted without fee, provided
6  * that (i) the above copyright notices and this permission notice appear in
7  * all copies of the software and related documentation, and (ii) the name of
8  * Silicon Graphics may not be used in any advertising or
9  * publicity relating to the software without the specific, prior written
10  * permission of Silicon Graphics.
11  *
12  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF
13  * ANY KIND,
14  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
15  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
16  *
17  * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR
18  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
19  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
20  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
21  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
22  * OF THIS SOFTWARE.
23  */
24
25 #include <stdio.h>
26 #include <string.h>
27 #include <stdlib.h>
28 #include <GL/glut.h>
29
30
31 #define CI_OFFSET_1 16
32 #define CI_OFFSET_2 32
33
34
35 GLenum doubleBuffer;
36
37 static void Init(void)
38 {
39    fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER));
40    fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION));
41    fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR));
42    fflush(stderr);
43
44 }
45
46 static void Reshape(int width, int height)
47 {
48
49     glViewport(0, 0, (GLint)width, (GLint)height);
50
51     glMatrixMode(GL_PROJECTION);
52     glLoadIdentity();
53     glOrtho(-1.0, 1.0, -1.0, 1.0, 1, -1);
54     glMatrixMode(GL_MODELVIEW);
55 }
56
57 static void Key(unsigned char key, int x, int y)
58 {
59
60     switch (key) {
61       case 27:
62         exit(1);
63       default:
64         break;
65     }
66
67     glutPostRedisplay();
68 }
69
70 static void Draw(void)
71 {
72    float z = 1.0;
73
74    glClearColor(0.0, 0.0, 1.0, 0.0);
75    glClearDepth(1.0);
76    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
77    glDepthFunc(GL_EQUAL);
78    glEnable(GL_DEPTH_TEST);
79
80    glBegin(GL_TRIANGLES);
81    glColor3f(0,0,.7); 
82    glVertex3f( 0.9, -0.9, z);
83    glColor3f(.8,0,0); 
84    glVertex3f( 0.9,  0.9, z);
85    glColor3f(0,.9,0); 
86    glVertex3f(-0.9,  0.0, z);
87    glEnd();
88
89    glFlush();
90
91    {
92       GLfloat z;
93       glReadPixels(125, 125, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z);
94       printf("Z at (125, 125) = %f\n", z);
95    }
96
97    if (doubleBuffer) {
98       glutSwapBuffers();
99    }
100 }
101
102 static GLenum Args(int argc, char **argv)
103 {
104     GLint i;
105
106     doubleBuffer = GL_FALSE;
107
108     for (i = 1; i < argc; i++) {
109         if (strcmp(argv[i], "-sb") == 0) {
110             doubleBuffer = GL_FALSE;
111         } else if (strcmp(argv[i], "-db") == 0) {
112             doubleBuffer = GL_TRUE;
113         } else {
114             fprintf(stderr, "%s (Bad option).\n", argv[i]);
115             return GL_FALSE;
116         }
117     }
118     return GL_TRUE;
119 }
120
121 int main(int argc, char **argv)
122 {
123     GLenum type;
124
125     glutInit(&argc, argv);
126
127     if (Args(argc, argv) == GL_FALSE) {
128         exit(1);
129     }
130
131     glutInitWindowPosition(100, 0); glutInitWindowSize( 250, 250);
132
133     type = GLUT_RGB | GLUT_DEPTH;
134     type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
135     glutInitDisplayMode(type);
136
137     if (glutCreateWindow(*argv) == GL_FALSE) {
138         exit(1);
139     }
140
141     Init();
142
143     glutReshapeFunc(Reshape);
144     glutKeyboardFunc(Key);
145     glutDisplayFunc(Draw);
146     glutMainLoop();
147         return 0;
148 }