]> git.mxchange.org Git - simgear.git/blob - simgear/xgl/xglUtils.c
4af679dcfb788d8a6d49337bd61b6123d35a977c
[simgear.git] / simgear / xgl / xglUtils.c
1
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5
6 #if !defined( WIN32 )
7 #  if !defined( HAVE_STL_SGI_PORT ) && !defined( __MWERKS__ ) && !defined( __APPLE__ )
8 //   Avoid malloc with STLport and MSL
9 #    include <malloc.h>
10 #  endif
11 #endif
12
13 #ifdef HAVE_UNISTD_H
14 #  include <unistd.h>
15 #endif
16
17
18 #include "xgl.h"
19
20 #ifndef TRUE
21 #define TRUE  1
22 #define FALSE 0
23 #endif
24
25 int   xglTraceOn = TRUE ;
26
27 FILE *xglTraceFd = NULL;
28
29 struct GLenumLookup
30 {
31   GLenum val ;
32   char *name ;
33 } ;
34
35 static struct GLenumLookup glenum_string [] =
36 {
37 /*
38   Due to ambiguity - these are not in the table...
39
40     GL_NONE = , GL_ZERO = GL_FALSE = GL_POINTS = 0
41     GL_ONE  = , GL_TRUE = GL_LINES = 1
42 */
43   { GL_2D                       ,"GL_2D" },
44   { GL_2_BYTES                  ,"GL_2_BYTES" },
45   { GL_3D                       ,"GL_3D" },
46   { GL_3D_COLOR                 ,"GL_3D_COLOR" },
47   { GL_3D_COLOR_TEXTURE         ,"GL_3D_COLOR_TEXTURE" },
48   { GL_3_BYTES                  ,"GL_3_BYTES" },
49   { GL_4D_COLOR_TEXTURE         ,"GL_4D_COLOR_TEXTURE" },
50   { GL_4_BYTES                  ,"GL_4_BYTES" },
51   { GL_ACCUM                    ,"GL_ACCUM" },
52   { GL_ACCUM_ALPHA_BITS         ,"GL_ACCUM_ALPHA_BITS" },
53   { GL_ACCUM_BLUE_BITS          ,"GL_ACCUM_BLUE_BITS" },
54   { GL_ACCUM_CLEAR_VALUE        ,"GL_ACCUM_CLEAR_VALUE" },
55   { GL_ACCUM_GREEN_BITS         ,"GL_ACCUM_GREEN_BITS" },
56   { GL_ACCUM_RED_BITS           ,"GL_ACCUM_RED_BITS" },
57   { GL_ADD                      ,"GL_ADD" },
58   { GL_ALPHA                    ,"GL_ALPHA" },
59   { GL_ALPHA_BIAS               ,"GL_ALPHA_BIAS" },
60   { GL_ALPHA_BITS               ,"GL_ALPHA_BITS" },
61   { GL_ALPHA_SCALE              ,"GL_ALPHA_SCALE" },
62   { GL_ALPHA_TEST               ,"GL_ALPHA_TEST" },
63   { GL_ALPHA_TEST_FUNC          ,"GL_ALPHA_TEST_FUNC" },
64   { GL_ALPHA_TEST_REF           ,"GL_ALPHA_TEST_REF" },
65   { GL_ALWAYS                   ,"GL_ALWAYS" },
66   { GL_AMBIENT                  ,"GL_AMBIENT" },
67   { GL_AMBIENT_AND_DIFFUSE      ,"GL_AMBIENT_AND_DIFFUSE" },
68   { GL_AND                      ,"GL_AND" },
69   { GL_AND_INVERTED             ,"GL_AND_INVERTED" },
70   { GL_AND_REVERSE              ,"GL_AND_REVERSE" },
71   { GL_ATTRIB_STACK_DEPTH       ,"GL_ATTRIB_STACK_DEPTH" },
72   { GL_AUTO_NORMAL              ,"GL_AUTO_NORMAL" },
73   { GL_AUX0                     ,"GL_AUX0" },
74   { GL_AUX1                     ,"GL_AUX1" },
75   { GL_AUX2                     ,"GL_AUX2" },
76   { GL_AUX3                     ,"GL_AUX3" },
77   { GL_AUX_BUFFERS              ,"GL_AUX_BUFFERS" },
78   { GL_BACK                     ,"GL_BACK" },
79   { GL_BACK_LEFT                ,"GL_BACK_LEFT" },
80   { GL_BACK_RIGHT               ,"GL_BACK_RIGHT" },
81   { GL_BITMAP                   ,"GL_BITMAP" },
82   { GL_BITMAP_TOKEN             ,"GL_BITMAP_TOKEN" },
83   { GL_BLEND                    ,"GL_BLEND" },
84   { GL_BLEND_DST                ,"GL_BLEND_DST" },
85 #ifdef GL_BLEND_COLOR_EXT
86   { GL_BLEND_COLOR_EXT          ,"GL_BLEND_COLOR_EXT" },
87 #endif
88 #ifdef GL_BLEND_EQUATION_EXT
89   { GL_BLEND_EQUATION_EXT       ,"GL_BLEND_EQUATION_EXT" },
90 #endif
91   { GL_BLEND_SRC                ,"GL_BLEND_SRC" },
92   { GL_BLUE                     ,"GL_BLUE" },
93   { GL_BLUE_BIAS                ,"GL_BLUE_BIAS" },
94   { GL_BLUE_BITS                ,"GL_BLUE_BITS" },
95   { GL_BLUE_SCALE               ,"GL_BLUE_SCALE" },
96   { GL_BYTE                     ,"GL_BYTE" },
97   { GL_CCW                      ,"GL_CCW" },
98   { GL_CLAMP                    ,"GL_CLAMP" },
99   { GL_CLEAR                    ,"GL_CLEAR" },
100   { GL_CLIP_PLANE0              ,"GL_CLIP_PLANE0" },
101   { GL_CLIP_PLANE1              ,"GL_CLIP_PLANE1" },
102   { GL_CLIP_PLANE2              ,"GL_CLIP_PLANE2" },
103   { GL_CLIP_PLANE3              ,"GL_CLIP_PLANE3" },
104   { GL_CLIP_PLANE4              ,"GL_CLIP_PLANE4" },
105   { GL_CLIP_PLANE5              ,"GL_CLIP_PLANE5" },
106   { GL_COEFF                    ,"GL_COEFF" },
107   { GL_COLOR                    ,"GL_COLOR" },
108 #ifdef GL_COLOR_ARRAY_EXT
109   { GL_COLOR_ARRAY_COUNT_EXT    ,"GL_COLOR_ARRAY_COUNT_EXT" },
110   { GL_COLOR_ARRAY_EXT          ,"GL_COLOR_ARRAY_EXT" },
111   { GL_COLOR_ARRAY_POINTER_EXT  ,"GL_COLOR_ARRAY_POINTER_EXT" },
112   { GL_COLOR_ARRAY_SIZE_EXT     ,"GL_COLOR_ARRAY_SIZE_EXT" },
113   { GL_COLOR_ARRAY_STRIDE_EXT   ,"GL_COLOR_ARRAY_STRIDE_EXT" },
114   { GL_COLOR_ARRAY_TYPE_EXT     ,"GL_COLOR_ARRAY_TYPE_EXT" },
115 #endif
116   { GL_COLOR_CLEAR_VALUE        ,"GL_COLOR_CLEAR_VALUE" },
117   { GL_COLOR_INDEX              ,"GL_COLOR_INDEX" },
118   { GL_COLOR_INDEXES            ,"GL_COLOR_INDEXES" },
119   { GL_COLOR_MATERIAL           ,"GL_COLOR_MATERIAL" },
120   { GL_COLOR_MATERIAL_FACE      ,"GL_COLOR_MATERIAL_FACE" },
121   { GL_COLOR_MATERIAL_PARAMETER ,"GL_COLOR_MATERIAL_PARAMETER" },
122   { GL_COLOR_WRITEMASK          ,"GL_COLOR_WRITEMASK" },
123   { GL_COMPILE                  ,"GL_COMPILE" },
124   { GL_COMPILE_AND_EXECUTE      ,"GL_COMPILE_AND_EXECUTE" },
125 #ifdef GL_CONSTANT_ALPHA_EXT
126   { GL_CONSTANT_ALPHA_EXT       ,"GL_CONSTANT_ALPHA_EXT" },
127 #endif
128   { GL_CONSTANT_ATTENUATION     ,"GL_CONSTANT_ATTENUATION" },
129 #ifdef GL_CONSTANT_COLOR_EXT
130   { GL_CONSTANT_COLOR_EXT       ,"GL_CONSTANT_COLOR_EXT" },
131 #endif
132   { GL_COPY                     ,"GL_COPY" },
133   { GL_COPY_INVERTED            ,"GL_COPY_INVERTED" },
134   { GL_COPY_PIXEL_TOKEN         ,"GL_COPY_PIXEL_TOKEN" },
135   { GL_CULL_FACE                ,"GL_CULL_FACE" },
136   { GL_CULL_FACE_MODE           ,"GL_CULL_FACE_MODE" },
137   { GL_CURRENT_COLOR            ,"GL_CURRENT_COLOR" },
138   { GL_CURRENT_INDEX            ,"GL_CURRENT_INDEX" },
139   { GL_CURRENT_NORMAL           ,"GL_CURRENT_NORMAL" },
140   { GL_CURRENT_RASTER_COLOR     ,"GL_CURRENT_RASTER_COLOR" },
141   { GL_CURRENT_RASTER_DISTANCE  ,"GL_CURRENT_RASTER_DISTANCE" },
142   { GL_CURRENT_RASTER_INDEX     ,"GL_CURRENT_RASTER_INDEX" },
143   { GL_CURRENT_RASTER_POSITION  ,"GL_CURRENT_RASTER_POSITION" },
144   { GL_CURRENT_RASTER_POSITION_VALID,"GL_CURRENT_RASTER_POSITION_VALID" },
145   { GL_CURRENT_RASTER_TEXTURE_COORDS,"GL_CURRENT_RASTER_TEXTURE_COORDS" },
146   { GL_CURRENT_TEXTURE_COORDS   ,"GL_CURRENT_TEXTURE_COORDS" },
147   { GL_CW                       ,"GL_CW" },
148   { GL_DECAL                    ,"GL_DECAL" },
149   { GL_DECR                     ,"GL_DECR" },
150   { GL_DEPTH                    ,"GL_DEPTH" },
151   { GL_DEPTH_BIAS               ,"GL_DEPTH_BIAS" },
152   { GL_DEPTH_BITS               ,"GL_DEPTH_BITS" },
153   { GL_DEPTH_CLEAR_VALUE        ,"GL_DEPTH_CLEAR_VALUE" },
154   { GL_DEPTH_COMPONENT          ,"GL_DEPTH_COMPONENT" },
155   { GL_DEPTH_FUNC               ,"GL_DEPTH_FUNC" },
156   { GL_DEPTH_RANGE              ,"GL_DEPTH_RANGE" },
157   { GL_DEPTH_SCALE              ,"GL_DEPTH_SCALE" },
158   { GL_DEPTH_TEST               ,"GL_DEPTH_TEST" },
159   { GL_DEPTH_WRITEMASK          ,"GL_DEPTH_WRITEMASK" },
160   { GL_DIFFUSE                  ,"GL_DIFFUSE" },
161   { GL_DITHER                   ,"GL_DITHER" },
162   { GL_DOMAIN                   ,"GL_DOMAIN" },
163   { GL_DONT_CARE                ,"GL_DONT_CARE" },
164   { GL_DOUBLEBUFFER             ,"GL_DOUBLEBUFFER" },
165 #ifdef GL_DOUBLE_EXT
166   { GL_DOUBLE_EXT               ,"GL_DOUBLE_EXT" },
167 #endif
168   { GL_DRAW_BUFFER              ,"GL_DRAW_BUFFER" },
169   { GL_DRAW_PIXEL_TOKEN         ,"GL_DRAW_PIXEL_TOKEN" },
170   { GL_DST_ALPHA                ,"GL_DST_ALPHA" },
171   { GL_DST_COLOR                ,"GL_DST_COLOR" },
172   { GL_EDGE_FLAG                ,"GL_EDGE_FLAG" },
173 #ifdef GL_EDGE_FLAG_ARRAY_EXT
174   { GL_EDGE_FLAG_ARRAY_COUNT_EXT,"GL_EDGE_FLAG_ARRAY_COUNT_EXT" },
175   { GL_EDGE_FLAG_ARRAY_EXT      ,"GL_EDGE_FLAG_ARRAY_EXT" },
176   { GL_EDGE_FLAG_ARRAY_POINTER_EXT,"GL_EDGE_FLAG_ARRAY_POINTER_EXT" },
177   { GL_EDGE_FLAG_ARRAY_STRIDE_EXT,"GL_EDGE_FLAG_ARRAY_STRIDE_EXT" },
178 #endif
179   { GL_EMISSION                 ,"GL_EMISSION" },
180   { GL_EQUAL                    ,"GL_EQUAL" },
181   { GL_EQUIV                    ,"GL_EQUIV" },
182   { GL_EXP                      ,"GL_EXP" },
183   { GL_EXP2                     ,"GL_EXP2" },
184   { GL_EXTENSIONS               ,"GL_EXTENSIONS" },
185   { GL_EYE_LINEAR               ,"GL_EYE_LINEAR" },
186   { GL_EYE_PLANE                ,"GL_EYE_PLANE" },
187   { GL_FASTEST                  ,"GL_FASTEST" },
188   { GL_FEEDBACK                 ,"GL_FEEDBACK" },
189   { GL_FILL                     ,"GL_FILL" },
190   { GL_FLAT                     ,"GL_FLAT" },
191   { GL_FLOAT                    ,"GL_FLOAT" },
192   { GL_FOG                      ,"GL_FOG" },
193   { GL_FOG_COLOR                ,"GL_FOG_COLOR" },
194   { GL_FOG_DENSITY              ,"GL_FOG_DENSITY" },
195   { GL_FOG_END                  ,"GL_FOG_END" },
196   { GL_FOG_HINT                 ,"GL_FOG_HINT" },
197   { GL_FOG_INDEX                ,"GL_FOG_INDEX" },
198   { GL_FOG_MODE                 ,"GL_FOG_MODE" },
199   { GL_FOG_START                ,"GL_FOG_START" },
200   { GL_FRONT                    ,"GL_FRONT" },
201   { GL_FRONT_AND_BACK           ,"GL_FRONT_AND_BACK" },
202   { GL_FRONT_FACE               ,"GL_FRONT_FACE" },
203   { GL_FRONT_LEFT               ,"GL_FRONT_LEFT" },
204   { GL_FRONT_RIGHT              ,"GL_FRONT_RIGHT" },
205 #ifdef GL_FUNC_ADD_EXT
206   { GL_FUNC_ADD_EXT             ,"GL_FUNC_ADD_EXT" },
207   { GL_FUNC_REVERSE_SUBTRACT_EXT,"GL_FUNC_REVERSE_SUBTRACT_EXT" },
208   { GL_FUNC_SUBTRACT_EXT        ,"GL_FUNC_SUBTRACT_EXT" },
209 #endif
210   { GL_GEQUAL                   ,"GL_GEQUAL" },
211   { GL_GREATER                  ,"GL_GREATER" },
212   { GL_GREEN                    ,"GL_GREEN" },
213   { GL_GREEN_BIAS               ,"GL_GREEN_BIAS" },
214   { GL_GREEN_BITS               ,"GL_GREEN_BITS" },
215   { GL_GREEN_SCALE              ,"GL_GREEN_SCALE" },
216   { GL_INCR                     ,"GL_INCR" },
217 #ifdef GL_INDEX_ARRAY_EXT
218   { GL_INDEX_ARRAY_COUNT_EXT    ,"GL_INDEX_ARRAY_COUNT_EXT" },
219   { GL_INDEX_ARRAY_EXT          ,"GL_INDEX_ARRAY_EXT" },
220   { GL_INDEX_ARRAY_POINTER_EXT  ,"GL_INDEX_ARRAY_POINTER_EXT" },
221   { GL_INDEX_ARRAY_STRIDE_EXT   ,"GL_INDEX_ARRAY_STRIDE_EXT" },
222   { GL_INDEX_ARRAY_TYPE_EXT     ,"GL_INDEX_ARRAY_TYPE_EXT" },
223 #endif
224   { GL_INDEX_BITS               ,"GL_INDEX_BITS" },
225   { GL_INDEX_CLEAR_VALUE        ,"GL_INDEX_CLEAR_VALUE" },
226   { GL_INDEX_MODE               ,"GL_INDEX_MODE" },
227   { GL_INDEX_OFFSET             ,"GL_INDEX_OFFSET" },
228   { GL_INDEX_SHIFT              ,"GL_INDEX_SHIFT" },
229   { GL_INDEX_WRITEMASK          ,"GL_INDEX_WRITEMASK" },
230   { GL_INT                      ,"GL_INT" },
231   { GL_INVALID_ENUM             ,"GL_INVALID_ENUM" },
232   { GL_INVALID_OPERATION        ,"GL_INVALID_OPERATION" },
233   { GL_INVALID_VALUE            ,"GL_INVALID_VALUE" },
234   { GL_INVERT                   ,"GL_INVERT" },
235   { GL_KEEP                     ,"GL_KEEP" },
236   { GL_LEFT                     ,"GL_LEFT" },
237   { GL_LEQUAL                   ,"GL_LEQUAL" },
238   { GL_LESS                     ,"GL_LESS" },
239   { GL_LIGHT0                   ,"GL_LIGHT0" },
240   { GL_LIGHT1                   ,"GL_LIGHT1" },
241   { GL_LIGHT2                   ,"GL_LIGHT2" },
242   { GL_LIGHT3                   ,"GL_LIGHT3" },
243   { GL_LIGHT4                   ,"GL_LIGHT4" },
244   { GL_LIGHT5                   ,"GL_LIGHT5" },
245   { GL_LIGHT6                   ,"GL_LIGHT6" },
246   { GL_LIGHT7                   ,"GL_LIGHT7" },
247   { GL_LIGHTING                 ,"GL_LIGHTING" },
248   { GL_LIGHT_MODEL_AMBIENT      ,"GL_LIGHT_MODEL_AMBIENT" },
249   { GL_LIGHT_MODEL_LOCAL_VIEWER ,"GL_LIGHT_MODEL_LOCAL_VIEWER" },
250   { GL_LIGHT_MODEL_TWO_SIDE     ,"GL_LIGHT_MODEL_TWO_SIDE" },
251   { GL_LINE                     ,"GL_LINE" },
252   { GL_LINEAR                   ,"GL_LINEAR" },
253   { GL_LINEAR_ATTENUATION       ,"GL_LINEAR_ATTENUATION" },
254   { GL_LINEAR_MIPMAP_LINEAR     ,"GL_LINEAR_MIPMAP_LINEAR" },
255   { GL_LINEAR_MIPMAP_NEAREST    ,"GL_LINEAR_MIPMAP_NEAREST" },
256   { GL_LINE_LOOP                ,"GL_LINE_LOOP" },
257   { GL_LINE_RESET_TOKEN         ,"GL_LINE_RESET_TOKEN" },
258   { GL_LINE_SMOOTH              ,"GL_LINE_SMOOTH" },
259   { GL_LINE_SMOOTH_HINT         ,"GL_LINE_SMOOTH_HINT" },
260   { GL_LINE_STIPPLE             ,"GL_LINE_STIPPLE" },
261   { GL_LINE_STIPPLE_PATTERN     ,"GL_LINE_STIPPLE_PATTERN" },
262   { GL_LINE_STIPPLE_REPEAT      ,"GL_LINE_STIPPLE_REPEAT" },
263   { GL_LINE_STRIP               ,"GL_LINE_STRIP" },
264   { GL_LINE_TOKEN               ,"GL_LINE_TOKEN" },
265   { GL_LINE_WIDTH               ,"GL_LINE_WIDTH" },
266   { GL_LINE_WIDTH_GRANULARITY   ,"GL_LINE_WIDTH_GRANULARITY" },
267   { GL_LINE_WIDTH_RANGE         ,"GL_LINE_WIDTH_RANGE" },
268   { GL_LIST_BASE                ,"GL_LIST_BASE" },
269   { GL_LIST_INDEX               ,"GL_LIST_INDEX" },
270   { GL_LIST_MODE                ,"GL_LIST_MODE" },
271   { GL_LOAD                     ,"GL_LOAD" },
272   { GL_LOGIC_OP                 ,"GL_LOGIC_OP" },
273   { GL_LOGIC_OP_MODE            ,"GL_LOGIC_OP_MODE" },
274   { GL_LUMINANCE                ,"GL_LUMINANCE" },
275   { GL_LUMINANCE_ALPHA          ,"GL_LUMINANCE_ALPHA" },
276   { GL_MAP1_COLOR_4             ,"GL_MAP1_COLOR_4" },
277   { GL_MAP1_GRID_DOMAIN         ,"GL_MAP1_GRID_DOMAIN" },
278   { GL_MAP1_GRID_SEGMENTS       ,"GL_MAP1_GRID_SEGMENTS" },
279   { GL_MAP1_INDEX               ,"GL_MAP1_INDEX" },
280   { GL_MAP1_NORMAL              ,"GL_MAP1_NORMAL" },
281   { GL_MAP1_TEXTURE_COORD_1     ,"GL_MAP1_TEXTURE_COORD_1" },
282   { GL_MAP1_TEXTURE_COORD_2     ,"GL_MAP1_TEXTURE_COORD_2" },
283   { GL_MAP1_TEXTURE_COORD_3     ,"GL_MAP1_TEXTURE_COORD_3" },
284   { GL_MAP1_TEXTURE_COORD_4     ,"GL_MAP1_TEXTURE_COORD_4" },
285   { GL_MAP1_VERTEX_3            ,"GL_MAP1_VERTEX_3" },
286   { GL_MAP1_VERTEX_4            ,"GL_MAP1_VERTEX_4" },
287   { GL_MAP2_COLOR_4             ,"GL_MAP2_COLOR_4" },
288   { GL_MAP2_GRID_DOMAIN         ,"GL_MAP2_GRID_DOMAIN" },
289   { GL_MAP2_GRID_SEGMENTS       ,"GL_MAP2_GRID_SEGMENTS" },
290   { GL_MAP2_INDEX               ,"GL_MAP2_INDEX" },
291   { GL_MAP2_NORMAL              ,"GL_MAP2_NORMAL" },
292   { GL_MAP2_TEXTURE_COORD_1     ,"GL_MAP2_TEXTURE_COORD_1" },
293   { GL_MAP2_TEXTURE_COORD_2     ,"GL_MAP2_TEXTURE_COORD_2" },
294   { GL_MAP2_TEXTURE_COORD_3     ,"GL_MAP2_TEXTURE_COORD_3" },
295   { GL_MAP2_TEXTURE_COORD_4     ,"GL_MAP2_TEXTURE_COORD_4" },
296   { GL_MAP2_VERTEX_3            ,"GL_MAP2_VERTEX_3" },
297   { GL_MAP2_VERTEX_4            ,"GL_MAP2_VERTEX_4" },
298   { GL_MAP_COLOR                ,"GL_MAP_COLOR" },
299   { GL_MAP_STENCIL              ,"GL_MAP_STENCIL" },
300   { GL_MATRIX_MODE              ,"GL_MATRIX_MODE" },
301   { GL_MAX_ATTRIB_STACK_DEPTH   ,"GL_MAX_ATTRIB_STACK_DEPTH" },
302   { GL_MAX_CLIP_PLANES          ,"GL_MAX_CLIP_PLANES" },
303   { GL_MAX_EVAL_ORDER           ,"GL_MAX_EVAL_ORDER" },
304 #ifdef GL_MAX_EXT
305   { GL_MAX_EXT                  ,"GL_MAX_EXT" },
306 #endif
307   { GL_MAX_LIGHTS               ,"GL_MAX_LIGHTS" },
308   { GL_MAX_LIST_NESTING         ,"GL_MAX_LIST_NESTING" },
309   { GL_MAX_MODELVIEW_STACK_DEPTH,"GL_MAX_MODELVIEW_STACK_DEPTH" },
310   { GL_MAX_NAME_STACK_DEPTH     ,"GL_MAX_NAME_STACK_DEPTH" },
311   { GL_MAX_PIXEL_MAP_TABLE      ,"GL_MAX_PIXEL_MAP_TABLE" },
312   { GL_MAX_PROJECTION_STACK_DEPTH,"GL_MAX_PROJECTION_STACK_DEPTH" },
313   { GL_MAX_TEXTURE_SIZE         ,"GL_MAX_TEXTURE_SIZE" },
314   { GL_MAX_TEXTURE_STACK_DEPTH  ,"GL_MAX_TEXTURE_STACK_DEPTH" },
315   { GL_MAX_VIEWPORT_DIMS        ,"GL_MAX_VIEWPORT_DIMS" },
316 #ifdef GL_MIN_EXT
317   { GL_MIN_EXT                  ,"GL_MIN_EXT" },
318 #endif
319   { GL_MODELVIEW                ,"GL_MODELVIEW" },
320   { GL_MODELVIEW_MATRIX         ,"GL_MODELVIEW_MATRIX" },
321   { GL_MODELVIEW_STACK_DEPTH    ,"GL_MODELVIEW_STACK_DEPTH" },
322   { GL_MODULATE                 ,"GL_MODULATE" },
323   { GL_MULT                     ,"GL_MULT" },
324   { GL_NAME_STACK_DEPTH         ,"GL_NAME_STACK_DEPTH" },
325   { GL_NAND                     ,"GL_NAND" },
326   { GL_NEAREST                  ,"GL_NEAREST" },
327   { GL_NEAREST_MIPMAP_LINEAR    ,"GL_NEAREST_MIPMAP_LINEAR" },
328   { GL_NEAREST_MIPMAP_NEAREST   ,"GL_NEAREST_MIPMAP_NEAREST" },
329   { GL_NEVER                    ,"GL_NEVER" },
330   { GL_NICEST                   ,"GL_NICEST" },
331   { GL_NOOP                     ,"GL_NOOP" },
332   { GL_NOR                      ,"GL_NOR" },
333   { GL_NORMALIZE                ,"GL_NORMALIZE" },
334 #ifdef GL_NORMAL_ARRAY_EXT
335   { GL_NORMAL_ARRAY_COUNT_EXT   ,"GL_NORMAL_ARRAY_COUNT_EXT" },
336   { GL_NORMAL_ARRAY_EXT         ,"GL_NORMAL_ARRAY_EXT" },
337   { GL_NORMAL_ARRAY_POINTER_EXT ,"GL_NORMAL_ARRAY_POINTER_EXT" },
338   { GL_NORMAL_ARRAY_STRIDE_EXT  ,"GL_NORMAL_ARRAY_STRIDE_EXT" },
339   { GL_NORMAL_ARRAY_TYPE_EXT    ,"GL_NORMAL_ARRAY_TYPE_EXT" },
340 #endif
341   { GL_NOTEQUAL                 ,"GL_NOTEQUAL" },
342   { GL_OBJECT_LINEAR            ,"GL_OBJECT_LINEAR" },
343   { GL_OBJECT_PLANE             ,"GL_OBJECT_PLANE" },
344 #ifdef GL_ONE_MINUS_CONSTANT_ALPHA_EXT
345   { GL_ONE_MINUS_CONSTANT_ALPHA_EXT,"GL_ONE_MINUS_CONSTANT_ALPHA_EXT" },
346   { GL_ONE_MINUS_CONSTANT_COLOR_EXT,"GL_ONE_MINUS_CONSTANT_COLOR_EXT" },
347 #endif
348   { GL_ONE_MINUS_DST_ALPHA      ,"GL_ONE_MINUS_DST_ALPHA" },
349   { GL_ONE_MINUS_DST_COLOR      ,"GL_ONE_MINUS_DST_COLOR" },
350   { GL_ONE_MINUS_SRC_ALPHA      ,"GL_ONE_MINUS_SRC_ALPHA" },
351   { GL_ONE_MINUS_SRC_COLOR      ,"GL_ONE_MINUS_SRC_COLOR" },
352   { GL_OR                       ,"GL_OR" },
353   { GL_ORDER                    ,"GL_ORDER" },
354   { GL_OR_INVERTED              ,"GL_OR_INVERTED" },
355   { GL_OR_REVERSE               ,"GL_OR_REVERSE" },
356   { GL_OUT_OF_MEMORY            ,"GL_OUT_OF_MEMORY" },
357   { GL_PACK_ALIGNMENT           ,"GL_PACK_ALIGNMENT" },
358   { GL_PACK_LSB_FIRST           ,"GL_PACK_LSB_FIRST" },
359   { GL_PACK_ROW_LENGTH          ,"GL_PACK_ROW_LENGTH" },
360   { GL_PACK_SKIP_PIXELS         ,"GL_PACK_SKIP_PIXELS" },
361   { GL_PACK_SKIP_ROWS           ,"GL_PACK_SKIP_ROWS" },
362   { GL_PACK_SWAP_BYTES          ,"GL_PACK_SWAP_BYTES" },
363   { GL_PASS_THROUGH_TOKEN       ,"GL_PASS_THROUGH_TOKEN" },
364   { GL_PERSPECTIVE_CORRECTION_HINT,"GL_PERSPECTIVE_CORRECTION_HINT" },
365   { GL_PIXEL_MAP_A_TO_A         ,"GL_PIXEL_MAP_A_TO_A" },
366   { GL_PIXEL_MAP_A_TO_A_SIZE    ,"GL_PIXEL_MAP_A_TO_A_SIZE" },
367   { GL_PIXEL_MAP_B_TO_B         ,"GL_PIXEL_MAP_B_TO_B" },
368   { GL_PIXEL_MAP_B_TO_B_SIZE    ,"GL_PIXEL_MAP_B_TO_B_SIZE" },
369   { GL_PIXEL_MAP_G_TO_G         ,"GL_PIXEL_MAP_G_TO_G" },
370   { GL_PIXEL_MAP_G_TO_G_SIZE    ,"GL_PIXEL_MAP_G_TO_G_SIZE" },
371   { GL_PIXEL_MAP_I_TO_A         ,"GL_PIXEL_MAP_I_TO_A" },
372   { GL_PIXEL_MAP_I_TO_A_SIZE    ,"GL_PIXEL_MAP_I_TO_A_SIZE" },
373   { GL_PIXEL_MAP_I_TO_B         ,"GL_PIXEL_MAP_I_TO_B" },
374   { GL_PIXEL_MAP_I_TO_B_SIZE    ,"GL_PIXEL_MAP_I_TO_B_SIZE" },
375   { GL_PIXEL_MAP_I_TO_G         ,"GL_PIXEL_MAP_I_TO_G" },
376   { GL_PIXEL_MAP_I_TO_G_SIZE    ,"GL_PIXEL_MAP_I_TO_G_SIZE" },
377   { GL_PIXEL_MAP_I_TO_I         ,"GL_PIXEL_MAP_I_TO_I" },
378   { GL_PIXEL_MAP_I_TO_I_SIZE    ,"GL_PIXEL_MAP_I_TO_I_SIZE" },
379   { GL_PIXEL_MAP_I_TO_R         ,"GL_PIXEL_MAP_I_TO_R" },
380   { GL_PIXEL_MAP_I_TO_R_SIZE    ,"GL_PIXEL_MAP_I_TO_R_SIZE" },
381   { GL_PIXEL_MAP_R_TO_R         ,"GL_PIXEL_MAP_R_TO_R" },
382   { GL_PIXEL_MAP_R_TO_R_SIZE    ,"GL_PIXEL_MAP_R_TO_R_SIZE" },
383   { GL_PIXEL_MAP_S_TO_S         ,"GL_PIXEL_MAP_S_TO_S" },
384   { GL_PIXEL_MAP_S_TO_S_SIZE    ,"GL_PIXEL_MAP_S_TO_S_SIZE" },
385   { GL_POINT                    ,"GL_POINT" },
386   { GL_POINT_SIZE               ,"GL_POINT_SIZE" },
387   { GL_POINT_SIZE_GRANULARITY   ,"GL_POINT_SIZE_GRANULARITY" },
388   { GL_POINT_SIZE_RANGE         ,"GL_POINT_SIZE_RANGE" },
389   { GL_POINT_SMOOTH             ,"GL_POINT_SMOOTH" },
390   { GL_POINT_SMOOTH_HINT        ,"GL_POINT_SMOOTH_HINT" },
391   { GL_POINT_TOKEN              ,"GL_POINT_TOKEN" },
392   { GL_POLYGON                  ,"GL_POLYGON" },
393   { GL_POLYGON_MODE             ,"GL_POLYGON_MODE" },
394   { GL_POLYGON_SMOOTH           ,"GL_POLYGON_SMOOTH" },
395   { GL_POLYGON_SMOOTH_HINT      ,"GL_POLYGON_SMOOTH_HINT" },
396   { GL_POLYGON_STIPPLE          ,"GL_POLYGON_STIPPLE" },
397 #ifdef GL_POLYGON_OFFSET_EXT
398   { GL_POLYGON_OFFSET_BIAS_EXT  ,"GL_POLYGON_OFFSET_BIAS_EXT" },
399   { GL_POLYGON_OFFSET_EXT       ,"GL_POLYGON_OFFSET_EXT" },
400   { GL_POLYGON_OFFSET_FACTOR_EXT,"GL_POLYGON_OFFSET_FACTOR_EXT" },
401 #endif
402   { GL_POLYGON_TOKEN            ,"GL_POLYGON_TOKEN" },
403   { GL_POSITION                 ,"GL_POSITION" },
404   { GL_PROJECTION               ,"GL_PROJECTION" },
405   { GL_PROJECTION_MATRIX        ,"GL_PROJECTION_MATRIX" },
406   { GL_PROJECTION_STACK_DEPTH   ,"GL_PROJECTION_STACK_DEPTH" },
407   { GL_Q                        ,"GL_Q" },
408   { GL_QUADRATIC_ATTENUATION    ,"GL_QUADRATIC_ATTENUATION" },
409   { GL_QUADS                    ,"GL_QUADS" },
410   { GL_QUAD_STRIP               ,"GL_QUAD_STRIP" },
411   { GL_R                        ,"GL_R" },
412   { GL_READ_BUFFER              ,"GL_READ_BUFFER" },
413   { GL_RED                      ,"GL_RED" },
414   { GL_RED_BIAS                 ,"GL_RED_BIAS" },
415   { GL_RED_BITS                 ,"GL_RED_BITS" },
416   { GL_RED_SCALE                ,"GL_RED_SCALE" },
417   { GL_RENDER                   ,"GL_RENDER" },
418   { GL_RENDERER                 ,"GL_RENDERER" },
419   { GL_RENDER_MODE              ,"GL_RENDER_MODE" },
420   { GL_REPEAT                   ,"GL_REPEAT" },
421   { GL_REPLACE                  ,"GL_REPLACE" },
422 #ifdef GL_REPLACE_EXT
423   { GL_REPLACE_EXT              ,"GL_REPLACE_EXT" },
424 #endif
425   { GL_RETURN                   ,"GL_RETURN" },
426   { GL_RGB                      ,"GL_RGB" },
427   { GL_RGBA                     ,"GL_RGBA" },
428   { GL_RGBA_MODE                ,"GL_RGBA_MODE" },
429   { GL_RIGHT                    ,"GL_RIGHT" },
430   { GL_S                        ,"GL_S" },
431   { GL_SCISSOR_BOX              ,"GL_SCISSOR_BOX" },
432   { GL_SCISSOR_TEST             ,"GL_SCISSOR_TEST" },
433   { GL_SELECT                   ,"GL_SELECT" },
434   { GL_SET                      ,"GL_SET" },
435   { GL_SHADE_MODEL              ,"GL_SHADE_MODEL" },
436   { GL_SHININESS                ,"GL_SHININESS" },
437   { GL_SHORT                    ,"GL_SHORT" },
438   { GL_SMOOTH                   ,"GL_SMOOTH" },
439   { GL_SPECULAR                 ,"GL_SPECULAR" },
440   { GL_SPHERE_MAP               ,"GL_SPHERE_MAP" },
441   { GL_SPOT_CUTOFF              ,"GL_SPOT_CUTOFF" },
442   { GL_SPOT_DIRECTION           ,"GL_SPOT_DIRECTION" },
443   { GL_SPOT_EXPONENT            ,"GL_SPOT_EXPONENT" },
444   { GL_SRC_ALPHA                ,"GL_SRC_ALPHA" },
445   { GL_SRC_ALPHA_SATURATE       ,"GL_SRC_ALPHA_SATURATE" },
446   { GL_SRC_COLOR                ,"GL_SRC_COLOR" },
447   { GL_STACK_OVERFLOW           ,"GL_STACK_OVERFLOW" },
448   { GL_STACK_UNDERFLOW          ,"GL_STACK_UNDERFLOW" },
449   { GL_STENCIL                  ,"GL_STENCIL" },
450   { GL_STENCIL_BITS             ,"GL_STENCIL_BITS" },
451   { GL_STENCIL_CLEAR_VALUE      ,"GL_STENCIL_CLEAR_VALUE" },
452   { GL_STENCIL_FAIL             ,"GL_STENCIL_FAIL" },
453   { GL_STENCIL_FUNC             ,"GL_STENCIL_FUNC" },
454   { GL_STENCIL_INDEX            ,"GL_STENCIL_INDEX" },
455   { GL_STENCIL_PASS_DEPTH_FAIL  ,"GL_STENCIL_PASS_DEPTH_FAIL" },
456   { GL_STENCIL_PASS_DEPTH_PASS  ,"GL_STENCIL_PASS_DEPTH_PASS" },
457   { GL_STENCIL_REF              ,"GL_STENCIL_REF" },
458   { GL_STENCIL_TEST             ,"GL_STENCIL_TEST" },
459   { GL_STENCIL_VALUE_MASK       ,"GL_STENCIL_VALUE_MASK" },
460   { GL_STENCIL_WRITEMASK        ,"GL_STENCIL_WRITEMASK" },
461   { GL_STEREO                   ,"GL_STEREO" },
462   { GL_SUBPIXEL_BITS            ,"GL_SUBPIXEL_BITS" },
463   { GL_T                        ,"GL_T" },
464   { GL_TEXTURE                  ,"GL_TEXTURE" },
465   { GL_TEXTURE_1D               ,"GL_TEXTURE_1D" },
466   { GL_TEXTURE_2D               ,"GL_TEXTURE_2D" },
467   { GL_TEXTURE_BORDER           ,"GL_TEXTURE_BORDER" },
468   { GL_TEXTURE_BORDER_COLOR     ,"GL_TEXTURE_BORDER_COLOR" },
469   { GL_TEXTURE_COMPONENTS       ,"GL_TEXTURE_COMPONENTS" },
470 #ifdef GL_TEXTURE_COORD_ARRAY_EXT
471   { GL_TEXTURE_COORD_ARRAY_COUNT_EXT,"GL_TEXTURE_COORD_ARRAY_COUNT_EXT" },
472   { GL_TEXTURE_COORD_ARRAY_EXT  ,"GL_TEXTURE_COORD_ARRAY_EXT" },
473   { GL_TEXTURE_COORD_ARRAY_POINTER_EXT,"GL_TEXTURE_COORD_ARRAY_POINTER_EXT" },
474   { GL_TEXTURE_COORD_ARRAY_SIZE_EXT,"GL_TEXTURE_COORD_ARRAY_SIZE_EXT" },
475   { GL_TEXTURE_COORD_ARRAY_STRIDE_EXT,"GL_TEXTURE_COORD_ARRAY_STRIDE_EXT" },
476   { GL_TEXTURE_COORD_ARRAY_TYPE_EXT,"GL_TEXTURE_COORD_ARRAY_TYPE_EXT" },
477 #endif
478   { GL_TEXTURE_ENV              ,"GL_TEXTURE_ENV" },
479   { GL_TEXTURE_ENV_COLOR        ,"GL_TEXTURE_ENV_COLOR" },
480   { GL_TEXTURE_ENV_MODE         ,"GL_TEXTURE_ENV_MODE" },
481   { GL_TEXTURE_GEN_MODE         ,"GL_TEXTURE_GEN_MODE" },
482   { GL_TEXTURE_GEN_Q            ,"GL_TEXTURE_GEN_Q" },
483   { GL_TEXTURE_GEN_R            ,"GL_TEXTURE_GEN_R" },
484   { GL_TEXTURE_GEN_S            ,"GL_TEXTURE_GEN_S" },
485   { GL_TEXTURE_GEN_T            ,"GL_TEXTURE_GEN_T" },
486   { GL_TEXTURE_HEIGHT           ,"GL_TEXTURE_HEIGHT" },
487   { GL_TEXTURE_MAG_FILTER       ,"GL_TEXTURE_MAG_FILTER" },
488   { GL_TEXTURE_MATRIX           ,"GL_TEXTURE_MATRIX" },
489   { GL_TEXTURE_MIN_FILTER       ,"GL_TEXTURE_MIN_FILTER" },
490   { GL_TEXTURE_STACK_DEPTH      ,"GL_TEXTURE_STACK_DEPTH" },
491   { GL_TEXTURE_WIDTH            ,"GL_TEXTURE_WIDTH" },
492   { GL_TEXTURE_WRAP_S           ,"GL_TEXTURE_WRAP_S" },
493   { GL_TEXTURE_WRAP_T           ,"GL_TEXTURE_WRAP_T" },
494   { GL_TRIANGLES                ,"GL_TRIANGLES" },
495   { GL_TRIANGLE_FAN             ,"GL_TRIANGLE_FAN" },
496   { GL_TRIANGLE_STRIP           ,"GL_TRIANGLE_STRIP" },
497   { GL_UNPACK_ALIGNMENT         ,"GL_UNPACK_ALIGNMENT" },
498   { GL_UNPACK_LSB_FIRST         ,"GL_UNPACK_LSB_FIRST" },
499   { GL_UNPACK_ROW_LENGTH        ,"GL_UNPACK_ROW_LENGTH" },
500   { GL_UNPACK_SKIP_PIXELS       ,"GL_UNPACK_SKIP_PIXELS" },
501   { GL_UNPACK_SKIP_ROWS         ,"GL_UNPACK_SKIP_ROWS" },
502   { GL_UNPACK_SWAP_BYTES        ,"GL_UNPACK_SWAP_BYTES" },
503   { GL_UNSIGNED_BYTE            ,"GL_UNSIGNED_BYTE" },
504   { GL_UNSIGNED_INT             ,"GL_UNSIGNED_INT" },
505   { GL_UNSIGNED_SHORT           ,"GL_UNSIGNED_SHORT" },
506   { GL_VENDOR                   ,"GL_VENDOR" },
507   { GL_VERSION                  ,"GL_VERSION" },
508 #ifdef GL_VERTEX_ARRAY_EXT
509   { GL_VERTEX_ARRAY_COUNT_EXT   ,"GL_VERTEX_ARRAY_COUNT_EXT" },
510   { GL_VERTEX_ARRAY_EXT         ,"GL_VERTEX_ARRAY_EXT" },
511   { GL_VERTEX_ARRAY_POINTER_EXT ,"GL_VERTEX_ARRAY_POINTER_EXT" },
512   { GL_VERTEX_ARRAY_SIZE_EXT    ,"GL_VERTEX_ARRAY_SIZE_EXT" },
513   { GL_VERTEX_ARRAY_STRIDE_EXT  ,"GL_VERTEX_ARRAY_STRIDE_EXT" },
514   { GL_VERTEX_ARRAY_TYPE_EXT    ,"GL_VERTEX_ARRAY_TYPE_EXT" },
515 #endif
516   { GL_VIEWPORT                 ,"GL_VIEWPORT" },
517   { GL_XOR                      ,"GL_XOR" },
518   { GL_ZOOM_X                   ,"GL_ZOOM_X" },
519   { GL_ZOOM_Y                   ,"GL_ZOOM_Y" },
520
521   /* Magic end-marker - do not remove! */
522   { GL_ZERO, NULL }
523 } ;
524
525
526 int xglTraceIsEnabled ( char *gl_function_name )
527 {
528   static int frameno   = 0 ;
529   static int countdown = 0 ;
530
531   if ( strcmp ( gl_function_name, "glutSwapBuffers" ) == 0 )
532   {
533     if ( countdown == 0 )
534     {
535       char s [ 100 ] ;
536
537       fprintf ( stderr, "\nContinue Tracing after frame %d [Yes,No,Countdown,eXit] ?", ++frameno ) ;
538       gets ( s ) ;
539
540       if ( s[0] == 'x' )
541         exit ( 1 ) ;
542
543       xglTraceOn = ( s[0] != 'n' && s[0] != 'c' ) ;
544
545       if ( s[0] == 'c' )
546       {
547         fprintf ( stderr, "\nHow many frames should I wait until I ask again?" ) ;
548         gets ( s ) ;
549         countdown = atoi(s) ;
550       }
551
552       fprintf ( xglTraceFd, "/* Frame %d - tracing %s */\n", frameno, xglTraceOn ? "ON" : "OFF" ) ;
553     }
554     else
555       countdown-- ;
556   }
557
558   return xglTraceOn ;
559 }
560
561
562 int xglExecuteIsEnabled ( char *gl_function_name )
563 {
564   return TRUE ;
565 }
566
567 char *xglExpandGLenum ( GLenum x )
568 {
569   static GLenum last_val = GL_NONE ;
570   static char  *last_str = NULL ;
571   char *error_message;
572   int i;
573
574   /* Due to ambiguity - these are output as numbers...
575
576       GL_NONE = , GL_ZERO = GL_FALSE = GL_POINTS = 0
577       GL_ONE  = , GL_TRUE = GL_LINES = 1
578   */
579
580   if ( (int) x == 0 ) return "(GLenum) 0" ;
581   if ( (int) x == 1 ) return "(GLenum) 1" ;
582
583   if ( last_val == x ) return last_str ;
584
585   for ( i = 0 ; glenum_string [i].name != NULL ; i++ )
586     if ( glenum_string [i].val == x )
587       return  glenum_string [i].name ;
588
589   /*
590     WARNING - this will leak memory - but it is an error condition,
591               so I suppose it's acceptable.
592               You can't declare the 'error_message' string as a
593               static - or else double errors will go mis-reported.
594   */
595
596   error_message = (char *)malloc( 100 * sizeof(char) ) ;
597
598   sprintf ( error_message, "(GLenum) 0x%04x /* Illegal? */", (int) x ) ;
599
600   return error_message ;
601 }
602
603 static GLbyte    b1 [ 1 ],  b2 [ 2 ],  b3 [ 3 ],  b4 [ 4 ] ;
604 static GLdouble  d1 [ 1 ],  d2 [ 2 ],  d3 [ 3 ],  d4 [ 4 ] ;
605 static GLfloat   f1 [ 1 ],  f2 [ 2 ],  f3 [ 3 ],  f4 [ 4 ] ;
606 static GLint     i1 [ 1 ],  i2 [ 2 ],  i3 [ 3 ],  i4 [ 4 ] ;
607 static GLshort   s1 [ 1 ],  s2 [ 2 ],  s3 [ 3 ],  s4 [ 4 ] ;
608 static GLubyte  ub1 [ 1 ], ub2 [ 2 ], ub3 [ 3 ], ub4 [ 4 ] ;
609 static GLuint   ui1 [ 1 ], ui2 [ 2 ], ui3 [ 3 ], ui4 [ 4 ] ;
610 static GLushort us1 [ 1 ], us2 [ 2 ], us3 [ 3 ], us4 [ 4 ] ;
611
612 static GLdouble md [ 16 ] ;
613 static GLfloat  mf [ 16 ] ;
614
615 GLdouble *xglBuild1dv  ( GLdouble v ) {  d1[0] = v ; return  d1 ; }
616 GLfloat  *xglBuild1fv  ( GLfloat  v ) {  f1[0] = v ; return  f1 ; }
617 GLbyte   *xglBuild1bv  ( GLbyte   v ) {  b1[0] = v ; return  b1 ; }
618 GLint    *xglBuild1iv  ( GLint    v ) {  i1[0] = v ; return  i1 ; }
619 GLshort  *xglBuild1sv  ( GLshort  v ) {  s1[0] = v ; return  s1 ; }
620 GLubyte  *xglBuild1ubv ( GLubyte  v ) { ub1[0] = v ; return ub1 ; }
621 GLuint   *xglBuild1uiv ( GLuint   v ) { ui1[0] = v ; return ui1 ; }
622 GLushort *xglBuild1usv ( GLushort v ) { us1[0] = v ; return us1 ; }
623
624 GLdouble *xglBuild2dv  ( GLdouble v0, GLdouble v1 ) {  d2[0] = v0 ;  d2[1] = v1 ; return  d2 ; }
625 GLfloat  *xglBuild2fv  ( GLfloat  v0, GLfloat  v1 ) {  f2[0] = v0 ;  f2[1] = v1 ; return  f2 ; }
626 GLbyte   *xglBuild2bv  ( GLbyte   v0, GLbyte   v1 ) {  b2[0] = v0 ;  b2[1] = v1 ; return  b2 ; }
627 GLint    *xglBuild2iv  ( GLint    v0, GLint    v1 ) {  i2[0] = v0 ;  i2[1] = v1 ; return  i2 ; }
628 GLshort  *xglBuild2sv  ( GLshort  v0, GLshort  v1 ) {  s2[0] = v0 ;  s2[1] = v1 ; return  s2 ; }
629 GLubyte  *xglBuild2ubv ( GLubyte  v0, GLubyte  v1 ) { ub2[0] = v0 ; ub2[1] = v1 ; return ub2 ; }
630 GLuint   *xglBuild2uiv ( GLuint   v0, GLuint   v1 ) { ui2[0] = v0 ; ui2[1] = v1 ; return ui2 ; }
631 GLushort *xglBuild2usv ( GLushort v0, GLushort v1 ) { us2[0] = v0 ; us2[1] = v1 ; return us2 ; }
632
633 GLdouble *xglBuild3dv  ( GLdouble v0, GLdouble v1, GLdouble v2 ) {  d3[0] = v0 ;  d3[1] = v1 ;  d3[2] = v2 ; return  d3 ; }
634 GLfloat  *xglBuild3fv  ( GLfloat  v0, GLfloat  v1, GLfloat  v2 ) {  f3[0] = v0 ;  f3[1] = v1 ;  f3[2] = v2 ; return  f3 ; }
635 GLbyte   *xglBuild3bv  ( GLbyte   v0, GLbyte   v1, GLbyte   v2 ) {  b3[0] = v0 ;  b3[1] = v1 ;  b3[2] = v2 ; return  b3 ; }
636 GLint    *xglBuild3iv  ( GLint    v0, GLint    v1, GLint    v2 ) {  i3[0] = v0 ;  i3[1] = v1 ;  i3[2] = v2 ; return  i3 ; }
637 GLshort  *xglBuild3sv  ( GLshort  v0, GLshort  v1, GLshort  v2 ) {  s3[0] = v0 ;  s3[1] = v1 ;  s3[2] = v2 ; return  s3 ; }
638 GLubyte  *xglBuild3ubv ( GLubyte  v0, GLubyte  v1, GLubyte  v2 ) { ub3[0] = v0 ; ub3[1] = v1 ; ub3[2] = v2 ; return ub3 ; }
639 GLuint   *xglBuild3uiv ( GLuint   v0, GLuint   v1, GLuint   v2 ) { ui3[0] = v0 ; ui3[1] = v1 ; ui3[2] = v2 ; return ui3 ; }
640 GLushort *xglBuild3usv ( GLushort v0, GLushort v1, GLushort v2 ) { us3[0] = v0 ; us3[1] = v1 ; us3[2] = v2 ; return us3 ; }
641
642
643 GLdouble *xglBuild4dv  ( GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3 ) {  d4[0] = v0 ;  d4[1] = v1 ;  d4[2] = v2 ;  d4[3] = v3 ; return  d4 ; }
644 GLfloat  *xglBuild4fv  ( GLfloat  v0, GLfloat  v1, GLfloat  v2, GLfloat  v3 ) {  f4[0] = v0 ;  f4[1] = v1 ;  f4[2] = v2 ;  f4[3] = v3 ; return  f4 ; }
645 GLbyte   *xglBuild4bv  ( GLbyte   v0, GLbyte   v1, GLbyte   v2, GLbyte   v3 ) {  b4[0] = v0 ;  b4[1] = v1 ;  b4[2] = v2 ;  b4[3] = v3 ; return  b4 ; }
646 GLint    *xglBuild4iv  ( GLint    v0, GLint    v1, GLint    v2, GLint    v3 ) {  i4[0] = v0 ;  i4[1] = v1 ;  i4[2] = v2 ;  i4[3] = v3 ; return  i4 ; }
647 GLshort  *xglBuild4sv  ( GLshort  v0, GLshort  v1, GLshort  v2, GLshort  v3 ) {  s4[0] = v0 ;  s4[1] = v1 ;  s4[2] = v2 ;  s4[3] = v3 ; return  s4 ; }
648 GLubyte  *xglBuild4ubv ( GLubyte  v0, GLubyte  v1, GLubyte  v2, GLubyte  v3 ) { ub4[0] = v0 ; ub4[1] = v1 ; ub4[2] = v2 ; ub4[3] = v3 ; return ub4 ; }
649 GLuint   *xglBuild4uiv ( GLuint   v0, GLuint   v1, GLuint   v2, GLuint   v3 ) { ui4[0] = v0 ; ui4[1] = v1 ; ui4[2] = v2 ; ui4[3] = v3 ; return ui4 ; }
650 GLushort *xglBuild4usv ( GLushort v0, GLushort v1, GLushort v2, GLushort v3 ) { us4[0] = v0 ; us4[1] = v1 ; us4[2] = v2 ; us4[3] = v3 ; return us4 ; }
651
652 GLdouble *xglBuildMatrixd ( GLdouble m0 , GLdouble m1 , GLdouble m2 , GLdouble m3 ,
653                             GLdouble m4 , GLdouble m5 , GLdouble m6 , GLdouble m7 ,
654                             GLdouble m8 , GLdouble m9 , GLdouble m10, GLdouble m11,
655                             GLdouble m12, GLdouble m13, GLdouble m14, GLdouble m15 )
656 {
657   md[ 0] = m0  ; md[ 1] = m1  ; md[ 2] = m2  ; md[ 3] = m3  ;
658   md[ 4] = m4  ; md[ 5] = m5  ; md[ 6] = m6  ; md[ 7] = m7  ;
659   md[ 8] = m8  ; md[ 9] = m9  ; md[10] = m10 ; md[11] = m11 ;
660   md[12] = m12 ; md[13] = m13 ; md[14] = m14 ; md[15] = m15 ;
661
662   return md ;
663 }
664
665
666 GLfloat *xglBuildMatrixf ( GLfloat m0 , GLfloat m1 , GLfloat m2 , GLfloat m3 ,
667                            GLfloat m4 , GLfloat m5 , GLfloat m6 , GLfloat m7 ,
668                            GLfloat m8 , GLfloat m9 , GLfloat m10, GLfloat m11,
669                            GLfloat m12, GLfloat m13, GLfloat m14, GLfloat m15 )
670 {
671   mf[ 0] = m0  ; mf[ 1] = m1  ; mf[ 2] = m2  ; mf[ 3] = m3  ;
672   mf[ 4] = m4  ; mf[ 5] = m5  ; mf[ 6] = m6  ; mf[ 7] = m7  ;
673   mf[ 8] = m8  ; mf[ 9] = m9  ; mf[10] = m10 ; mf[11] = m11 ;
674   mf[12] = m12 ; mf[13] = m13 ; mf[14] = m14 ; mf[15] = m15 ;
675
676   return mf ;
677 }
678