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