1 /* 2 * (c) Copyright 1993, 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(TM) is a trademark of Silicon Graphics, Inc. 36 */ 37 #include <X11/Xlib.h> 38 #include <X11/Xutil.h> 39 #include <GL/glx.h> 40 #include <GL/gl.h> 41 #include <GL/glu.h> 42 43 #ifdef __cplusplus 44 extern "C" { 45 #endif 46 47 48 49 /* 50 ** Window Types 51 */ 52 53 #define TK_RGB 0 54 #define TK_INDEX 1 55 #define TK_SINGLE 0 56 #define TK_DOUBLE 2 57 #define TK_DIRECT 0 58 #define TK_INDIRECT 4 59 #define TK_ACCUM 8 60 #define TK_ALPHA 16 61 #define TK_DEPTH 32 62 #define TK_STENCIL 64 63 64 /* 65 ** Window Masks 66 */ 67 68 #define TK_IS_RGB(x) (((x) & TK_INDEX) == 0) 69 #define TK_IS_INDEX(x) (((x) & TK_INDEX) != 0) 70 #define TK_IS_SINGLE(x) (((x) & TK_DOUBLE) == 0) 71 #define TK_IS_DOUBLE(x) (((x) & TK_DOUBLE) != 0) 72 #define TK_HAS_ACCUM(x) (((x) & TK_ACCUM) != 0) 73 #define TK_HAS_ALPHA(x) (((x) & TK_ALPHA) != 0) 74 #define TK_HAS_DEPTH(x) (((x) & TK_DEPTH) != 0) 75 #define TK_HAS_STENCIL(x) (((x) & TK_STENCIL) != 0) 76 #define TK_IS_DIRECT(x) (((x) & TK_INDIRECT) != 0) 77 #define TK_IS_INDIRECT(x) (((x) & TK_INDIRECT) == 0) 78 79 /* 80 ** Event Status 81 */ 82 83 #define TK_LEFTBUTTON 1 84 #define TK_RIGHTBUTTON 2 85 #define TK_MIDDLEBUTTON 4 86 #define TK_SHIFT 1 87 #define TK_CONTROL 2 88 89 /* 90 ** Key Codes 91 */ 92 93 #define TK_SHIFT_L 0x01 94 #define TK_SHIFT_R 0x02 95 #define TK_CONTROL_L 0x03 96 #define TK_CONTROL_R 0x04 97 98 99 100 #define TK_RETURN 0x0D 101 #define TK_ESCAPE 0x1B 102 #define TK_SPACE 0x20 103 #define TK_LEFT 0x25 104 #define TK_UP 0x26 105 #define TK_RIGHT 0x27 106 #define TK_DOWN 0x28 107 #define TK_A 'A' 108 #define TK_B 'B' 109 #define TK_C 'C' 110 #define TK_D 'D' 111 #define TK_E 'E' 112 #define TK_F 'F' 113 #define TK_G 'G' 114 #define TK_H 'H' 115 #define TK_I 'I' 116 #define TK_J 'J' 117 #define TK_K 'K' 118 #define TK_L 'L' 119 #define TK_M 'M' 120 #define TK_N 'N' 121 #define TK_O 'O' 122 #define TK_P 'P' 123 #define TK_Q 'Q' 124 #define TK_R 'R' 125 #define TK_S 'S' 126 #define TK_T 'T' 127 #define TK_U 'U' 128 #define TK_V 'V' 129 #define TK_W 'W' 130 #define TK_X 'X' 131 #define TK_Y 'Y' 132 #define TK_Z 'Z' 133 #define TK_a 'a' 134 #define TK_b 'b' 135 #define TK_c 'c' 136 #define TK_d 'd' 137 #define TK_e 'e' 138 #define TK_f 'f' 139 #define TK_g 'g' 140 #define TK_h 'h' 141 #define TK_i 'i' 142 #define TK_j 'j' 143 #define TK_k 'k' 144 #define TK_l 'l' 145 #define TK_m 'm' 146 #define TK_n 'n' 147 #define TK_o 'o' 148 #define TK_p 'p' 149 #define TK_q 'q' 150 #define TK_r 'r' 151 #define TK_s 's' 152 #define TK_t 't' 153 #define TK_u 'u' 154 #define TK_v 'v' 155 #define TK_w 'w' 156 #define TK_x 'x' 157 #define TK_y 'y' 158 #define TK_z 'z' 159 #define TK_0 '0' 160 #define TK_1 '1' 161 #define TK_2 '2' 162 #define TK_3 '3' 163 #define TK_4 '4' 164 #define TK_5 '5' 165 #define TK_6 '6' 166 #define TK_7 '7' 167 #define TK_8 '8' 168 #define TK_9 '9' 169 170 /* 171 ** Color Macros 172 */ 173 174 enum { 175 TK_BLACK = 0, 176 TK_RED, 177 TK_GREEN, 178 TK_YELLOW, 179 TK_BLUE, 180 TK_MAGENTA, 181 TK_CYAN, 182 TK_WHITE 183 }; 184 185 extern float tkRGBMap[8][3]; 186 187 #define TK_SETCOLOR(x, y) (TK_IS_RGB((x)) ? \ 188 glColor3fv(tkRGBMap[(y)]) : glIndexf((y))) 189 190 /* 191 ** RGB Image Structure 192 */ 193 194 typedef struct _TK_RGBImageRec { 195 GLint sizeX, sizeY; 196 unsigned char *data; 197 } TK_RGBImageRec; 198 199 /* 200 ** Prototypes 201 */ 202 203 extern void tkInitDisplayMode(GLenum); 204 extern void tkInitPosition(int, int, int, int); 205 extern GLenum tkInitWindow(char *); 206 extern void tkCloseWindow(void); 207 extern void tkQuit(void); 208 209 extern void tkExec(void); 210 extern void tkExposeFunc(void (*)(int, int)); 211 extern void tkReshapeFunc(void (*)(int, int)); 212 extern void tkDisplayFunc(void (*)(void)); 213 extern void tkKeyDownFunc(GLenum (*)(int, GLenum)); 214 extern void tkMouseDownFunc(GLenum (*)(int, int, GLenum)); 215 extern void tkMouseUpFunc(GLenum (*)(int, int, GLenum)); 216 extern void tkMouseMoveFunc(GLenum (*)(int, int, GLenum)); 217 extern void tkIdleFunc(void (*)(void)); 218 219 extern void tkSwapBuffers(void); 220 221 extern int tkGetColorMapSize(void); 222 extern void tkGetMouseLoc(int *, int *); 223 extern Display *tkGetXDisplay(void); 224 extern Window tkGetXWindow(void); 225 226 extern void tkSetOneColor(int, float, float, float); 227 extern void tkSetFogRamp(int, int); 228 extern void tkSetGreyRamp(void); 229 extern void tkSetRGBMap(int, float *); 230 231 extern TK_RGBImageRec *tkRGBImageLoad(char *); 232 233 extern GLenum tkCreateStrokeFont(GLuint); 234 extern GLenum tkCreateOutlineFont(GLuint); 235 extern GLenum tkCreateFilledFont(GLuint); 236 extern GLenum tkCreateBitmapFont(GLuint); 237 extern void tkDrawStr(GLuint, char *); 238 239 #ifdef __cplusplus 240 } 241 #endif 242