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 <windows.h> 38 #include <GL/gl.h> 39 #include <GL/glu.h> 40 41 42 /* 43 ** Window Types 44 */ 45 46 #define TK_RGB 0 47 #define TK_INDEX 1 48 #define TK_SINGLE 0 49 #define TK_DOUBLE 2 50 #define TK_DIRECT 0 51 #define TK_INDIRECT 4 52 #define TK_ACCUM 8 53 #define TK_ALPHA 16 54 #define TK_DEPTH 32 /* 32-bit depth buffer */ 55 #define TK_STENCIL 64 56 #define TK_DEPTH16 256 /* 16-bit depth buffer */ 57 #define TK_FIXED_332_PAL 512 58 59 /* 60 ** Display Mode Selection Criteria 61 */ 62 63 enum { 64 TK_USE_ID = 1, 65 TK_EXACT_MATCH, 66 TK_MINIMUM_CRITERIA 67 }; 68 69 /* 70 ** Window Masks 71 */ 72 73 #define TK_IS_RGB(x) (((x) & TK_INDEX) == 0) 74 #define TK_IS_INDEX(x) (((x) & TK_INDEX) != 0) 75 #define TK_IS_SINGLE(x) (((x) & TK_DOUBLE) == 0) 76 #define TK_IS_DOUBLE(x) (((x) & TK_DOUBLE) != 0) 77 #define TK_HAS_ACCUM(x) (((x) & TK_ACCUM) != 0) 78 #define TK_HAS_ALPHA(x) (((x) & TK_ALPHA) != 0) 79 #define TK_HAS_DEPTH(x) (((x) & (TK_DEPTH | TK_DEPTH16)) != 0) 80 #define TK_HAS_STENCIL(x) (((x) & TK_STENCIL) != 0) 81 #define TK_IS_DIRECT(x) (((x) & TK_INDIRECT) == 0) 82 #define TK_IS_INDIRECT(x) (((x) & TK_INDIRECT) != 0) 83 #define TK_USE_FIXED_332_PAL(x) (((x) & TK_FIXED_332_PAL) != 0) 84 #define TK_IS_DEPTH16(x) (((x) & TK_DEPTH16) != 0) 85 86 /* 87 ** Event Status 88 */ 89 90 #define TK_LEFTBUTTON 1 91 #define TK_RIGHTBUTTON 2 92 #define TK_MIDDLEBUTTON 4 93 #define TK_SHIFT 1 94 #define TK_CONTROL 2 95 96 /* 97 ** Key Codes 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 - Default Windows Logical palette 172 */ 173 174 enum { 175 TK_BLACK = 0, 176 TK_RED = 13, 177 TK_GREEN, 178 TK_YELLOW, 179 TK_BLUE, 180 TK_MAGENTA, 181 TK_CYAN, 182 TK_WHITE 183 }; 184 185 extern float auxRGBMap[20][3]; 186 #define tkRGBMap auxRGBMap 187 188 #define TK_SETCOLOR(x, y) (TK_IS_RGB((x)) ? \ 189 glColor3fv(auxRGBMap[(y)]) : glIndexf((y))) 190 191 /* 192 ** RGB Image Structure 193 */ 194 195 typedef struct _TK_RGBImageRec { 196 GLint sizeX, sizeY; 197 unsigned char *data; 198 } TK_RGBImageRec; 199 200 /* 201 ** Prototypes 202 */ 203 204 extern void tkInitDisplayMode(GLenum); 205 extern void tkInitPosition(int, int, int, int); 206 extern void tkInitDisplayModePolicy(GLenum); 207 extern GLenum tkInitDisplayModeID(GLint); 208 extern GLenum tkInitWindow(char *); 209 extern GLenum tkInitWindowAW(char *, BOOL); 210 extern void tkCloseWindow(void); 211 extern void tkQuit(void); 212 213 extern void tkExec(void); 214 extern void tkExposeFunc(void (*)(int, int)); 215 extern void tkReshapeFunc(void (*)(GLsizei, GLsizei)); 216 extern void tkDisplayFunc(void (*)(void)); 217 extern void tkKeyDownFunc(GLenum (*)(int, GLenum)); 218 extern void tkMouseDownFunc(GLenum (*)(int, int, GLenum)); 219 extern void tkMouseUpFunc(GLenum (*)(int, int, GLenum)); 220 extern void tkMouseMoveFunc(GLenum (*)(int, int, GLenum)); 221 extern void tkIdleFunc(void (*)(void)); 222 223 extern void tkSwapBuffers(void); 224 225 extern GLint tkGetColorMapSize(void); 226 extern void tkGetMouseLoc(int *, int *); 227 extern GLint tkGetDisplayModeID(void); 228 extern GLenum tkGetDisplayModePolicy(void); 229 extern GLenum tkGetDisplayMode(void); 230 231 extern void tkSetOneColor(int, float, float, float); 232 extern void tkSetFogRamp(int, int); 233 extern void tkSetGreyRamp(void); 234 extern void tkSetRGBMap(int, float *); 235 236 extern TK_RGBImageRec *tkRGBImageLoad(char *); 237 extern TK_RGBImageRec *tkRGBImageLoadAW(char *, BOOL); 238 239 extern TK_RGBImageRec *tkDIBImageLoad(char *); 240 extern TK_RGBImageRec *tkDIBImageLoadAW(char *, BOOL); 241 242 extern GLenum tkCreateStrokeFont(GLuint); 243 extern GLenum tkCreateOutlineFont(GLuint); 244 extern GLenum tkCreateFilledFont(GLuint); 245 extern GLenum tkCreateBitmapFont(GLuint); 246 extern void tkDrawStr(GLuint, char *); 247 248 /* Windows specific routines */ 249 extern HWND tkGetHWND(void); 250 extern HDC tkGetHDC(void); 251 extern HGLRC tkGetHRC(void); 252 253 /* Error popup control */ 254 extern void tkErrorPopups(GLboolean); 255 extern GLboolean tkPopupEnable; 256 #define MESSAGEBOX(a, b, c, d) if (tkPopupEnable) MessageBoxA((a), (b), (c), (d)) 257