Merge commit 'origin/master' into gallium-0.2
[mesa.git] / progs / tests / bug_texstore_i8.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 * Based on the trivial/quad-tex-2d program.
26 * Modified by Jakob Bornecrantz <jakob@tungstengraphics.com>
27 */
28
29 #include <stdio.h>
30 #include <string.h>
31 #include <stdlib.h>
32 #include <GL/glut.h>
33
34 static GLenum Target = GL_TEXTURE_2D;
35 static GLenum Filter = GL_NEAREST;
36 GLenum doubleBuffer;
37 static float Rot = 0;
38 static int win = 0;
39
40 static void Init(void)
41 {
42 int internalFormat;
43 int sourceFormat;
44
45 fprintf(stderr, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
46 fprintf(stderr, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
47 fprintf(stderr, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
48
49 glClearColor(0.0, 0.0, 1.0, 0.0);
50
51 #define SIZE 16
52 {
53 GLubyte tex2d[SIZE][SIZE][4];
54 GLint s, t;
55
56 for (s = 0; s < SIZE; s++) {
57 for (t = 0; t < SIZE; t++) {
58 tex2d[t][s][0] = 0xff;
59 tex2d[t][s][1] = 0xff;
60 tex2d[t][s][2] = 0xff;
61 tex2d[t][s][3] = 0xff;
62 }
63 }
64
65 internalFormat = GL_LUMINANCE8;
66 sourceFormat = GL_RGBA;
67
68 glTexImage2D(Target,
69 0,
70 internalFormat,
71 SIZE, SIZE,
72 0,
73 sourceFormat,
74 GL_UNSIGNED_BYTE,
75 //GL_UNSIGNED_INT,
76 tex2d);
77
78 glEnable(Target);
79 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
80 glTexParameterf(Target, GL_TEXTURE_WRAP_R, GL_REPEAT);
81 glTexParameterf(Target, GL_TEXTURE_MIN_FILTER, Filter);
82 glTexParameterf(Target, GL_TEXTURE_MAG_FILTER, Filter);
83 }
84 }
85
86 static void Reshape(int width, int height)
87 {
88 glViewport(0, 0, (GLint)width, (GLint)height);
89 glMatrixMode(GL_PROJECTION);
90 glLoadIdentity();
91 #if 0
92 glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
93 #else
94 glFrustum(-1, 1, -1, 1, 10, 20);
95 #endif
96 glMatrixMode(GL_MODELVIEW);
97 glLoadIdentity();
98 glTranslatef(0, 0, -15);
99 }
100
101 static void Key(unsigned char key, int x, int y)
102 {
103 switch (key) {
104 case 'r':
105 Rot += 10.0;
106 break;
107 case 'R':
108 Rot -= 10.0;
109 break;
110 case 27:
111 glutDestroyWindow(win);
112 exit(0);
113 default:
114 return;
115 }
116 glutPostRedisplay();
117 }
118
119 static void Draw(void)
120 {
121 glClear(GL_COLOR_BUFFER_BIT);
122
123 glPushMatrix();
124 glRotatef(Rot, 0, 1, 0);
125
126 glBegin(GL_QUADS);
127 glTexCoord2f(1,0);
128 glVertex3f( 0.9, -0.9, 0.0);
129 glTexCoord2f(1,1);
130 glVertex3f( 0.9, 0.9, 0.0);
131 glTexCoord2f(0,1);
132 glVertex3f(-0.9, 0.9, 0.0);
133 glTexCoord2f(0,0);
134 glVertex3f(-0.9, -0.9, 0.0);
135 glEnd();
136
137 glPopMatrix();
138
139 glFlush();
140
141 if (doubleBuffer) {
142 glutSwapBuffers();
143 }
144 }
145
146 static GLenum Args(int argc, char **argv)
147 {
148 GLint i;
149
150 doubleBuffer = GL_FALSE;
151
152 for (i = 1; i < argc; i++) {
153 if (strcmp(argv[i], "-sb") == 0) {
154 doubleBuffer = GL_FALSE;
155 } else if (strcmp(argv[i], "-db") == 0) {
156 doubleBuffer = GL_TRUE;
157 } else {
158 fprintf(stderr, "%s (Bad option).\n", argv[i]);
159 return GL_FALSE;
160 }
161 }
162 return GL_TRUE;
163 }
164
165 int main(int argc, char **argv)
166 {
167 GLenum type;
168
169 glutInit(&argc, argv);
170
171 if (Args(argc, argv) == GL_FALSE) {
172 exit(1);
173 }
174
175 glutInitWindowPosition(0, 0);
176 glutInitWindowSize(250, 250);
177
178 type = GLUT_RGB;
179 type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
180 glutInitDisplayMode(type);
181
182 win = glutCreateWindow("Tex test");
183 if (!win) {
184 exit(1);
185 }
186
187 Init();
188
189 glutReshapeFunc(Reshape);
190 glutKeyboardFunc(Key);
191 glutDisplayFunc(Draw);
192 glutMainLoop();
193 return 0;
194 }