1 | /*
|
---|
2 | * Copyright (c) 1993-1997, Silicon Graphics, Inc.
|
---|
3 | * ALL RIGHTS RESERVED
|
---|
4 | * Permission to use, copy, modify, and distribute this software for
|
---|
5 | * any purpose and without fee is hereby granted, provided that the above
|
---|
6 | * copyright notice appear in all copies and that both the copyright notice
|
---|
7 | * and this permission notice appear in supporting documentation, and that
|
---|
8 | * the name of Silicon Graphics, Inc. not be used in advertising
|
---|
9 | * or publicity pertaining to distribution of the software without specific,
|
---|
10 | * written prior permission.
|
---|
11 | *
|
---|
12 | * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
|
---|
13 | * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
|
---|
14 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
|
---|
15 | * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
|
---|
16 | * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
|
---|
17 | * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
|
---|
18 | * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
|
---|
19 | * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
|
---|
20 | * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN
|
---|
21 | * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
|
---|
22 | * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
|
---|
23 | * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
|
---|
24 | *
|
---|
25 | * US Government Users Restricted Rights
|
---|
26 | * Use, duplication, or disclosure by the Government is subject to
|
---|
27 | * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
|
---|
28 | * (c)(1)(ii) of the Rights in Technical Data and Computer Software
|
---|
29 | * clause at DFARS 252.227-7013 and/or in similar or successor
|
---|
30 | * clauses in the FAR or the DOD or NASA FAR Supplement.
|
---|
31 | * Unpublished-- rights reserved under the copyright laws of the
|
---|
32 | * United States. Contractor/manufacturer is Silicon Graphics,
|
---|
33 | * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311.
|
---|
34 | *
|
---|
35 | * OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
---|
36 | */
|
---|
37 |
|
---|
38 | /*
|
---|
39 | * font.c
|
---|
40 | *
|
---|
41 | * Draws some text in a bitmapped font. Uses glBitmap()
|
---|
42 | * and other pixel routines. Also demonstrates use of
|
---|
43 | * display lists.
|
---|
44 | */
|
---|
45 | #include <GL/glut.h>
|
---|
46 | #include <stdlib.h>
|
---|
47 | #include <string.h>
|
---|
48 |
|
---|
49 | GLubyte space[] =
|
---|
50 | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
---|
51 |
|
---|
52 | GLubyte letters[][13] = {
|
---|
53 | {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18},
|
---|
54 | {0x00, 0x00, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe},
|
---|
55 | {0x00, 0x00, 0x7e, 0xe7, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e},
|
---|
56 | {0x00, 0x00, 0xfc, 0xce, 0xc7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xce, 0xfc},
|
---|
57 | {0x00, 0x00, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0xff},
|
---|
58 | {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xff},
|
---|
59 | {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xcf, 0xc0, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e},
|
---|
60 | {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3},
|
---|
61 | {0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e},
|
---|
62 | {0x00, 0x00, 0x7c, 0xee, 0xc6, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06},
|
---|
63 | {0x00, 0x00, 0xc3, 0xc6, 0xcc, 0xd8, 0xf0, 0xe0, 0xf0, 0xd8, 0xcc, 0xc6, 0xc3},
|
---|
64 | {0x00, 0x00, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0},
|
---|
65 | {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xff, 0xff, 0xe7, 0xc3},
|
---|
66 | {0x00, 0x00, 0xc7, 0xc7, 0xcf, 0xcf, 0xdf, 0xdb, 0xfb, 0xf3, 0xf3, 0xe3, 0xe3},
|
---|
67 | {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e},
|
---|
68 | {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe},
|
---|
69 | {0x00, 0x00, 0x3f, 0x6e, 0xdf, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c},
|
---|
70 | {0x00, 0x00, 0xc3, 0xc6, 0xcc, 0xd8, 0xf0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe},
|
---|
71 | {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0x7e, 0xe0, 0xc0, 0xc0, 0xe7, 0x7e},
|
---|
72 | {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff},
|
---|
73 | {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3},
|
---|
74 | {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3},
|
---|
75 | {0x00, 0x00, 0xc3, 0xe7, 0xff, 0xff, 0xdb, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3},
|
---|
76 | {0x00, 0x00, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3},
|
---|
77 | {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3},
|
---|
78 | {0x00, 0x00, 0xff, 0xc0, 0xc0, 0x60, 0x30, 0x7e, 0x0c, 0x06, 0x03, 0x03, 0xff}
|
---|
79 | };
|
---|
80 |
|
---|
81 | GLuint fontOffset;
|
---|
82 |
|
---|
83 | void makeRasterFont(void)
|
---|
84 | {
|
---|
85 | GLuint i, j;
|
---|
86 | glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
---|
87 |
|
---|
88 | fontOffset = glGenLists (128);
|
---|
89 | for (i = 0,j = 'A'; i < 26; i++,j++) {
|
---|
90 | glNewList(fontOffset + j, GL_COMPILE);
|
---|
91 | glBitmap(8, 13, 0.0, 2.0, 10.0, 0.0, letters[i]);
|
---|
92 | glEndList();
|
---|
93 | }
|
---|
94 | glNewList(fontOffset + ' ', GL_COMPILE);
|
---|
95 | glBitmap(8, 13, 0.0, 2.0, 10.0, 0.0, space);
|
---|
96 | glEndList();
|
---|
97 | }
|
---|
98 |
|
---|
99 | void init(void)
|
---|
100 | {
|
---|
101 | glShadeModel (GL_FLAT);
|
---|
102 | makeRasterFont();
|
---|
103 | }
|
---|
104 |
|
---|
105 | void printString(char *s)
|
---|
106 | {
|
---|
107 | glPushAttrib (GL_LIST_BIT);
|
---|
108 | glListBase(fontOffset);
|
---|
109 | glCallLists((GLsizei) strlen(s), GL_UNSIGNED_BYTE, (GLubyte *) s);
|
---|
110 | glPopAttrib ();
|
---|
111 | }
|
---|
112 |
|
---|
113 | /* Everything above this line could be in a library
|
---|
114 | * that defines a font. To make it work, you've got
|
---|
115 | * to call makeRasterFont() before you start making
|
---|
116 | * calls to printString().
|
---|
117 | */
|
---|
118 | void display(void)
|
---|
119 | {
|
---|
120 | GLfloat white[3] = { 1.0, 1.0, 1.0 };
|
---|
121 |
|
---|
122 | glClear(GL_COLOR_BUFFER_BIT);
|
---|
123 | glColor3fv(white);
|
---|
124 |
|
---|
125 | glRasterPos2i(20, 60);
|
---|
126 | printString("THE QUICK BROWN FOX JUMPS");
|
---|
127 | glRasterPos2i(20, 40);
|
---|
128 | printString("OVER A LAZY DOG");
|
---|
129 | glFlush ();
|
---|
130 | }
|
---|
131 |
|
---|
132 | void reshape(int w, int h)
|
---|
133 | {
|
---|
134 | glViewport(0, 0, (GLsizei) w, (GLsizei) h);
|
---|
135 | glMatrixMode(GL_PROJECTION);
|
---|
136 | glLoadIdentity();
|
---|
137 | glOrtho (0.0, w, 0.0, h, -1.0, 1.0);
|
---|
138 | glMatrixMode(GL_MODELVIEW);
|
---|
139 | }
|
---|
140 |
|
---|
141 | /* ARGSUSED1 */
|
---|
142 | void keyboard(unsigned char key, int x, int y)
|
---|
143 | {
|
---|
144 | switch (key) {
|
---|
145 | case 27:
|
---|
146 | exit(0);
|
---|
147 | }
|
---|
148 | }
|
---|
149 |
|
---|
150 | /* Main Loop
|
---|
151 | * Open window with initial window size, title bar,
|
---|
152 | * RGBA display mode, and handle input events.
|
---|
153 | */
|
---|
154 | int main(int argc, char** argv)
|
---|
155 | {
|
---|
156 | glutInit(&argc, argv);
|
---|
157 | glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
|
---|
158 | glutInitWindowSize(300, 100);
|
---|
159 | glutInitWindowPosition (100, 100);
|
---|
160 | glutCreateWindow(argv[0]);
|
---|
161 | init();
|
---|
162 | glutReshapeFunc(reshape);
|
---|
163 | glutKeyboardFunc(keyboard);
|
---|
164 | glutDisplayFunc(display);
|
---|
165 | glutMainLoop();
|
---|
166 | return 0;
|
---|
167 | }
|
---|