2 * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc.
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.
12 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF
14 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
15 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
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
28 #include "glut_wrap.h"
30 GLenum doubleBuffer
= 1;
39 static float win_width
= 250;
40 static float win_height
= 250;
47 static void Init(void)
49 fprintf(stderr
, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER
));
50 fprintf(stderr
, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION
));
51 fprintf(stderr
, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR
));
54 glClearColor(0, 0, 0, 0.0);
57 static void Reshape(int width
, int height
)
65 static void Key(unsigned char key
, int x
, int y
)
94 tw
= th
= tx
= ty
= 0;
105 static void Draw(void)
108 float w
= tw
+ win_width
;
109 float h
= th
+ win_height
;
111 fprintf(stderr
, "glViewport(%f %f %f %f)\n", tx
, ty
, w
, h
);
112 fprintf(stderr
, "mode: %s\n", mode
== FRUSTUM
? "FRUSTUM" : "ORTHO");
113 fprintf(stderr
, "z: %f\n", z
);
116 glMatrixMode(GL_PROJECTION
);
121 glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 25.0);
125 glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
129 glMatrixMode(GL_MODELVIEW
);
133 glClear(GL_COLOR_BUFFER_BIT
);
136 /***********************************************************************
137 * Should be clipped to be no larger than the triangles:
139 glViewport(tx
, ty
, w
, h
);
143 glVertex3f(-100, -100, z
);
144 glVertex3f(-100, 100, z
);
145 glVertex3f(100, 100, z
);
146 glVertex3f(100, -100, z
);
151 glVertex3f(-10, -10, z
);
152 glVertex3f(-10, 10, z
);
153 glVertex3f(10, 10, z
);
154 glVertex3f(10, -10, z
);
159 glVertex3f(-2, -2, z
);
160 glVertex3f(-2, 2, z
);
162 glVertex3f(2, -2, z
);
168 glVertex3f(-1, -1, z
);
169 glVertex3f(-1, 1, z
);
171 glVertex3f(1, -1, z
);
174 /***********************************************************************
176 glViewport(0, 0, win_width
, win_height
);
179 glVertex3f(-1, 0, z
);
182 glVertex3f(0, -1, z
);
187 /***********************************************************************
189 glViewport(tx
, ty
, w
, h
);
190 glBegin(GL_TRIANGLES
);
192 glVertex3f(-1, -1, z
);
193 glVertex3f(0, -1, z
);
194 glVertex3f(-.5, -.5, z
);
197 glVertex3f(0, -1, z
);
198 glVertex3f(1, -1, z
);
199 glVertex3f(.5, -.5, z
);
201 glVertex3f(-.5, -.5, z
);
202 glVertex3f(.5, -.5, z
);
209 glVertex3f(.5, .5, z
);
213 glVertex3f(-1, 1, z
);
214 glVertex3f(-.5, .5, z
);
216 glVertex3f(.5, .5, z
);
217 glVertex3f(-.5, .5, z
);
218 glVertex3f( 0, 0, z
);
223 glViewport(0, 0, win_width
, win_height
);
227 for (i
= -10; i
< 10; i
++) {
233 glVertex3f(-1, f
, z
);
236 glVertex3f(f
, -1, z
);
250 static GLenum
Args(int argc
, char **argv
)
255 tx
= atof(getenv("VPX"));
258 ty
= atof(getenv("VPY"));
261 for (i
= 1; i
< argc
; i
++) {
262 if (strcmp(argv
[i
], "-sb") == 0) {
263 doubleBuffer
= GL_FALSE
;
264 } else if (strcmp(argv
[i
], "-db") == 0) {
265 doubleBuffer
= GL_TRUE
;
267 fprintf(stderr
, "%s (Bad option).\n", argv
[i
]);
276 special(int k
, int x
, int y
)
298 int main(int argc
, char **argv
)
302 glutInit(&argc
, argv
);
304 if (Args(argc
, argv
) == GL_FALSE
) {
308 glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250);
310 type
= GLUT_RGB
| GLUT_ALPHA
;
311 type
|= (doubleBuffer
) ? GLUT_DOUBLE
: GLUT_SINGLE
;
312 glutInitDisplayMode(type
);
314 win
= glutCreateWindow(*argv
);
321 glutReshapeFunc(Reshape
);
322 glutKeyboardFunc(Key
);
323 glutSpecialFunc(special
);
324 glutDisplayFunc(Draw
);