1 /*
2  * Mesa 3-D graphics library
3  *
4  * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included
14  * in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22  * OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
25 /**
26  * \brief  Translate vectors of numbers between various types.
27  * \author Keith Whitwell.
28  */
29 
30 
31 #include "main/glheader.h"
32 #include "main/macros.h"
33 
34 #include "m_translate.h"
35 
36 
37 
38 typedef void (*trans_1f_func)(GLfloat *to,
39 			      const void *ptr,
40 			      GLuint stride,
41 			      GLuint start,
42 			      GLuint n );
43 
44 typedef void (*trans_1ui_func)(GLuint *to,
45 			       const void *ptr,
46 			       GLuint stride,
47 			       GLuint start,
48 			       GLuint n );
49 
50 typedef void (*trans_1ub_func)(GLubyte *to,
51 			       const void *ptr,
52 			       GLuint stride,
53 			       GLuint start,
54 			       GLuint n );
55 
56 typedef void (*trans_4ub_func)(GLubyte (*to)[4],
57                                const void *ptr,
58                                GLuint stride,
59                                GLuint start,
60                                GLuint n );
61 
62 typedef void (*trans_4us_func)(GLushort (*to)[4],
63                                const void *ptr,
64                                GLuint stride,
65                                GLuint start,
66                                GLuint n );
67 
68 typedef void (*trans_4f_func)(GLfloat (*to)[4],
69 			      const void *ptr,
70 			      GLuint stride,
71 			      GLuint start,
72 			      GLuint n );
73 
74 typedef void (*trans_3fn_func)(GLfloat (*to)[3],
75 			      const void *ptr,
76 			      GLuint stride,
77 			      GLuint start,
78 			      GLuint n );
79 
80 
81 
82 
83 #define TYPE_IDX(t) ((t) & 0xf)
84 #define MAX_TYPES TYPE_IDX(GL_DOUBLE)+1      /* 0xa + 1 */
85 
86 
87 static trans_1f_func  _math_trans_1f_tab[MAX_TYPES];
88 static trans_1ui_func _math_trans_1ui_tab[MAX_TYPES];
89 static trans_1ub_func _math_trans_1ub_tab[MAX_TYPES];
90 static trans_3fn_func  _math_trans_3fn_tab[MAX_TYPES];
91 static trans_4ub_func _math_trans_4ub_tab[5][MAX_TYPES];
92 static trans_4us_func _math_trans_4us_tab[5][MAX_TYPES];
93 static trans_4f_func  _math_trans_4f_tab[5][MAX_TYPES];
94 static trans_4f_func  _math_trans_4fn_tab[5][MAX_TYPES];
95 
96 
97 #define PTR_ELT(ptr, elt) (((SRC *)ptr)[elt])
98 
99 
100 #define TAB(x) _math_trans##x##_tab
101 #define ARGS   GLuint start, GLuint n
102 #define SRC_START  start
103 #define DST_START  0
104 #define STRIDE stride
105 #define NEXT_F f += stride
106 #define NEXT_F2
107 
108 
109 
110 
111 /**
112  * Translate from GL_BYTE.
113  */
114 #define SRC GLbyte
115 #define SRC_IDX TYPE_IDX(GL_BYTE)
116 #define TRX_3FN(f,n)   BYTE_TO_FLOAT( PTR_ELT(f,n) )
117 #if 1
118 #define TRX_4F(f,n)   BYTE_TO_FLOAT( PTR_ELT(f,n) )
119 #else
120 #define TRX_4F(f,n)   (GLfloat)( PTR_ELT(f,n) )
121 #endif
122 #define TRX_4FN(f,n)   BYTE_TO_FLOAT( PTR_ELT(f,n) )
123 #define TRX_UB(ub, f,n)  ub = BYTE_TO_UBYTE( PTR_ELT(f,n) )
124 #define TRX_US(ch, f,n)  ch = BYTE_TO_USHORT( PTR_ELT(f,n) )
125 #define TRX_UI(f,n)  (PTR_ELT(f,n) < 0 ? 0 : (GLuint)  PTR_ELT(f,n))
126 
127 
128 #define SZ 4
129 #define INIT init_trans_4_GLbyte_raw
130 #define DEST_4F trans_4_GLbyte_4f_raw
131 #define DEST_4FN trans_4_GLbyte_4fn_raw
132 #define DEST_4UB trans_4_GLbyte_4ub_raw
133 #define DEST_4US trans_4_GLbyte_4us_raw
134 #include "m_trans_tmp.h"
135 
136 #define SZ 3
137 #define INIT init_trans_3_GLbyte_raw
138 #define DEST_4F trans_3_GLbyte_4f_raw
139 #define DEST_4FN trans_3_GLbyte_4fn_raw
140 #define DEST_4UB trans_3_GLbyte_4ub_raw
141 #define DEST_4US trans_3_GLbyte_4us_raw
142 #define DEST_3FN trans_3_GLbyte_3fn_raw
143 #include "m_trans_tmp.h"
144 
145 #define SZ 2
146 #define INIT init_trans_2_GLbyte_raw
147 #define DEST_4F trans_2_GLbyte_4f_raw
148 #define DEST_4FN trans_2_GLbyte_4fn_raw
149 #include "m_trans_tmp.h"
150 
151 #define SZ 1
152 #define INIT init_trans_1_GLbyte_raw
153 #define DEST_4F trans_1_GLbyte_4f_raw
154 #define DEST_4FN trans_1_GLbyte_4fn_raw
155 #define DEST_1UB trans_1_GLbyte_1ub_raw
156 #define DEST_1UI trans_1_GLbyte_1ui_raw
157 #include "m_trans_tmp.h"
158 
159 #undef SRC
160 #undef TRX_3FN
161 #undef TRX_4F
162 #undef TRX_4FN
163 #undef TRX_UB
164 #undef TRX_US
165 #undef TRX_UI
166 #undef SRC_IDX
167 
168 
169 /**
170  * Translate from GL_UNSIGNED_BYTE.
171  */
172 #define SRC GLubyte
173 #define SRC_IDX TYPE_IDX(GL_UNSIGNED_BYTE)
174 #define TRX_3FN(f,n)	     UBYTE_TO_FLOAT(PTR_ELT(f,n))
175 #define TRX_4F(f,n)	     (GLfloat)( PTR_ELT(f,n) )
176 #define TRX_4FN(f,n)	     UBYTE_TO_FLOAT(PTR_ELT(f,n))
177 #define TRX_UB(ub, f,n)	     ub = PTR_ELT(f,n)
178 #define TRX_US(us, f,n)      us = UBYTE_TO_USHORT(PTR_ELT(f,n))
179 #define TRX_UI(f,n)          (GLuint)PTR_ELT(f,n)
180 
181 /* 4ub->4ub handled in special case below.
182  */
183 #define SZ 4
184 #define INIT init_trans_4_GLubyte_raw
185 #define DEST_4F trans_4_GLubyte_4f_raw
186 #define DEST_4FN trans_4_GLubyte_4fn_raw
187 #define DEST_4US trans_4_GLubyte_4us_raw
188 #include "m_trans_tmp.h"
189 
190 
191 #define SZ 3
192 #define INIT init_trans_3_GLubyte_raw
193 #define DEST_4UB trans_3_GLubyte_4ub_raw
194 #define DEST_4US trans_3_GLubyte_4us_raw
195 #define DEST_3FN trans_3_GLubyte_3fn_raw
196 #define DEST_4F trans_3_GLubyte_4f_raw
197 #define DEST_4FN trans_3_GLubyte_4fn_raw
198 #include "m_trans_tmp.h"
199 
200 
201 #define SZ 1
202 #define INIT init_trans_1_GLubyte_raw
203 #define DEST_1UI trans_1_GLubyte_1ui_raw
204 #define DEST_1UB trans_1_GLubyte_1ub_raw
205 #include "m_trans_tmp.h"
206 
207 #undef SRC
208 #undef SRC_IDX
209 #undef TRX_3FN
210 #undef TRX_4F
211 #undef TRX_4FN
212 #undef TRX_UB
213 #undef TRX_US
214 #undef TRX_UI
215 
216 
217 /* GL_SHORT
218  */
219 #define SRC GLshort
220 #define SRC_IDX TYPE_IDX(GL_SHORT)
221 #define TRX_3FN(f,n)   SHORT_TO_FLOAT( PTR_ELT(f,n) )
222 #define TRX_4F(f,n)   (GLfloat)( PTR_ELT(f,n) )
223 #define TRX_4FN(f,n)  SHORT_TO_FLOAT( PTR_ELT(f,n) )
224 #define TRX_UB(ub, f,n)  ub = SHORT_TO_UBYTE(PTR_ELT(f,n))
225 #define TRX_US(us, f,n)  us = SHORT_TO_USHORT(PTR_ELT(f,n))
226 #define TRX_UI(f,n)  (PTR_ELT(f,n) < 0 ? 0 : (GLuint)  PTR_ELT(f,n))
227 
228 
229 #define SZ  4
230 #define INIT init_trans_4_GLshort_raw
231 #define DEST_4F trans_4_GLshort_4f_raw
232 #define DEST_4FN trans_4_GLshort_4fn_raw
233 #define DEST_4UB trans_4_GLshort_4ub_raw
234 #define DEST_4US trans_4_GLshort_4us_raw
235 #include "m_trans_tmp.h"
236 
237 #define SZ 3
238 #define INIT init_trans_3_GLshort_raw
239 #define DEST_4F trans_3_GLshort_4f_raw
240 #define DEST_4FN trans_3_GLshort_4fn_raw
241 #define DEST_4UB trans_3_GLshort_4ub_raw
242 #define DEST_4US trans_3_GLshort_4us_raw
243 #define DEST_3FN trans_3_GLshort_3fn_raw
244 #include "m_trans_tmp.h"
245 
246 #define SZ 2
247 #define INIT init_trans_2_GLshort_raw
248 #define DEST_4F trans_2_GLshort_4f_raw
249 #define DEST_4FN trans_2_GLshort_4fn_raw
250 #include "m_trans_tmp.h"
251 
252 #define SZ 1
253 #define INIT init_trans_1_GLshort_raw
254 #define DEST_4F trans_1_GLshort_4f_raw
255 #define DEST_4FN trans_1_GLshort_4fn_raw
256 #define DEST_1UB trans_1_GLshort_1ub_raw
257 #define DEST_1UI trans_1_GLshort_1ui_raw
258 #include "m_trans_tmp.h"
259 
260 
261 #undef SRC
262 #undef SRC_IDX
263 #undef TRX_3FN
264 #undef TRX_4F
265 #undef TRX_4FN
266 #undef TRX_UB
267 #undef TRX_US
268 #undef TRX_UI
269 
270 
271 /* GL_UNSIGNED_SHORT
272  */
273 #define SRC GLushort
274 #define SRC_IDX TYPE_IDX(GL_UNSIGNED_SHORT)
275 #define TRX_3FN(f,n)   USHORT_TO_FLOAT( PTR_ELT(f,n) )
276 #define TRX_4F(f,n)   (GLfloat)( PTR_ELT(f,n) )
277 #define TRX_4FN(f,n)  USHORT_TO_FLOAT( PTR_ELT(f,n) )
278 #define TRX_UB(ub,f,n)  ub = (GLubyte) (PTR_ELT(f,n) >> 8)
279 #define TRX_US(us,f,n)  us = PTR_ELT(f,n)
280 #define TRX_UI(f,n)  (GLuint)   PTR_ELT(f,n)
281 
282 
283 #define SZ 4
284 #define INIT init_trans_4_GLushort_raw
285 #define DEST_4F trans_4_GLushort_4f_raw
286 #define DEST_4FN trans_4_GLushort_4fn_raw
287 #define DEST_4UB trans_4_GLushort_4ub_raw
288 #define DEST_4US trans_4_GLushort_4us_raw
289 #include "m_trans_tmp.h"
290 
291 #define SZ 3
292 #define INIT init_trans_3_GLushort_raw
293 #define DEST_4F trans_3_GLushort_4f_raw
294 #define DEST_4FN trans_3_GLushort_4fn_raw
295 #define DEST_4UB trans_3_GLushort_4ub_raw
296 #define DEST_4US trans_3_GLushort_4us_raw
297 #define DEST_3FN trans_3_GLushort_3fn_raw
298 #include "m_trans_tmp.h"
299 
300 #define SZ 2
301 #define INIT init_trans_2_GLushort_raw
302 #define DEST_4F trans_2_GLushort_4f_raw
303 #define DEST_4FN trans_2_GLushort_4fn_raw
304 #include "m_trans_tmp.h"
305 
306 #define SZ 1
307 #define INIT init_trans_1_GLushort_raw
308 #define DEST_4F trans_1_GLushort_4f_raw
309 #define DEST_4FN trans_1_GLushort_4fn_raw
310 #define DEST_1UB trans_1_GLushort_1ub_raw
311 #define DEST_1UI trans_1_GLushort_1ui_raw
312 #include "m_trans_tmp.h"
313 
314 #undef SRC
315 #undef SRC_IDX
316 #undef TRX_3FN
317 #undef TRX_4F
318 #undef TRX_4FN
319 #undef TRX_UB
320 #undef TRX_US
321 #undef TRX_UI
322 
323 
324 /* GL_INT
325  */
326 #define SRC GLint
327 #define SRC_IDX TYPE_IDX(GL_INT)
328 #define TRX_3FN(f,n)   INT_TO_FLOAT( PTR_ELT(f,n) )
329 #define TRX_4F(f,n)   (GLfloat)( PTR_ELT(f,n) )
330 #define TRX_4FN(f,n)  INT_TO_FLOAT( PTR_ELT(f,n) )
331 #define TRX_UB(ub, f,n)  ub = INT_TO_UBYTE(PTR_ELT(f,n))
332 #define TRX_US(us, f,n)  us = INT_TO_USHORT(PTR_ELT(f,n))
333 #define TRX_UI(f,n)  (PTR_ELT(f,n) < 0 ? 0 : (GLuint)  PTR_ELT(f,n))
334 
335 
336 #define SZ 4
337 #define INIT init_trans_4_GLint_raw
338 #define DEST_4F trans_4_GLint_4f_raw
339 #define DEST_4FN trans_4_GLint_4fn_raw
340 #define DEST_4UB trans_4_GLint_4ub_raw
341 #define DEST_4US trans_4_GLint_4us_raw
342 #include "m_trans_tmp.h"
343 
344 #define SZ 3
345 #define INIT init_trans_3_GLint_raw
346 #define DEST_4F trans_3_GLint_4f_raw
347 #define DEST_4FN trans_3_GLint_4fn_raw
348 #define DEST_4UB trans_3_GLint_4ub_raw
349 #define DEST_4US trans_3_GLint_4us_raw
350 #define DEST_3FN trans_3_GLint_3fn_raw
351 #include "m_trans_tmp.h"
352 
353 #define SZ 2
354 #define INIT init_trans_2_GLint_raw
355 #define DEST_4F trans_2_GLint_4f_raw
356 #define DEST_4FN trans_2_GLint_4fn_raw
357 #include "m_trans_tmp.h"
358 
359 #define SZ 1
360 #define INIT init_trans_1_GLint_raw
361 #define DEST_4F trans_1_GLint_4f_raw
362 #define DEST_4FN trans_1_GLint_4fn_raw
363 #define DEST_1UB trans_1_GLint_1ub_raw
364 #define DEST_1UI trans_1_GLint_1ui_raw
365 #include "m_trans_tmp.h"
366 
367 
368 #undef SRC
369 #undef SRC_IDX
370 #undef TRX_3FN
371 #undef TRX_4F
372 #undef TRX_4FN
373 #undef TRX_UB
374 #undef TRX_US
375 #undef TRX_UI
376 
377 
378 /* GL_UNSIGNED_INT
379  */
380 #define SRC GLuint
381 #define SRC_IDX TYPE_IDX(GL_UNSIGNED_INT)
382 #define TRX_3FN(f,n)   INT_TO_FLOAT( PTR_ELT(f,n) )
383 #define TRX_4F(f,n)   (GLfloat)( PTR_ELT(f,n) )
384 #define TRX_4FN(f,n)  UINT_TO_FLOAT( PTR_ELT(f,n) )
385 #define TRX_UB(ub, f,n)  ub = (GLubyte) (PTR_ELT(f,n) >> 24)
386 #define TRX_US(us, f,n)  us = (GLshort) (PTR_ELT(f,n) >> 16)
387 #define TRX_UI(f,n)		PTR_ELT(f,n)
388 
389 
390 #define SZ 4
391 #define INIT init_trans_4_GLuint_raw
392 #define DEST_4F trans_4_GLuint_4f_raw
393 #define DEST_4FN trans_4_GLuint_4fn_raw
394 #define DEST_4UB trans_4_GLuint_4ub_raw
395 #define DEST_4US trans_4_GLuint_4us_raw
396 #include "m_trans_tmp.h"
397 
398 #define SZ 3
399 #define INIT init_trans_3_GLuint_raw
400 #define DEST_4F trans_3_GLuint_4f_raw
401 #define DEST_4FN trans_3_GLuint_4fn_raw
402 #define DEST_4UB trans_3_GLuint_4ub_raw
403 #define DEST_4US trans_3_GLuint_4us_raw
404 #define DEST_3FN trans_3_GLuint_3fn_raw
405 #include "m_trans_tmp.h"
406 
407 #define SZ 2
408 #define INIT init_trans_2_GLuint_raw
409 #define DEST_4F trans_2_GLuint_4f_raw
410 #define DEST_4FN trans_2_GLuint_4fn_raw
411 #include "m_trans_tmp.h"
412 
413 #define SZ 1
414 #define INIT init_trans_1_GLuint_raw
415 #define DEST_4F trans_1_GLuint_4f_raw
416 #define DEST_4FN trans_1_GLuint_4fn_raw
417 #define DEST_1UB trans_1_GLuint_1ub_raw
418 #define DEST_1UI trans_1_GLuint_1ui_raw
419 #include "m_trans_tmp.h"
420 
421 #undef SRC
422 #undef SRC_IDX
423 #undef TRX_3FN
424 #undef TRX_4F
425 #undef TRX_4FN
426 #undef TRX_UB
427 #undef TRX_US
428 #undef TRX_UI
429 
430 
431 /* GL_DOUBLE
432  */
433 #define SRC GLdouble
434 #define SRC_IDX TYPE_IDX(GL_DOUBLE)
435 #define TRX_3FN(f,n)   (GLfloat) PTR_ELT(f,n)
436 #define TRX_4F(f,n)   (GLfloat) PTR_ELT(f,n)
437 #define TRX_4FN(f,n)   (GLfloat) PTR_ELT(f,n)
438 #define TRX_UB(ub,f,n) UNCLAMPED_FLOAT_TO_UBYTE(ub, PTR_ELT(f,n))
439 #define TRX_US(us,f,n) UNCLAMPED_FLOAT_TO_USHORT(us, PTR_ELT(f,n))
440 #define TRX_UI(f,n)  (GLuint) (GLint) PTR_ELT(f,n)
441 #define TRX_1F(f,n)   (GLfloat) PTR_ELT(f,n)
442 
443 
444 #define SZ 4
445 #define INIT init_trans_4_GLdouble_raw
446 #define DEST_4F trans_4_GLdouble_4f_raw
447 #define DEST_4FN trans_4_GLdouble_4fn_raw
448 #define DEST_4UB trans_4_GLdouble_4ub_raw
449 #define DEST_4US trans_4_GLdouble_4us_raw
450 #include "m_trans_tmp.h"
451 
452 #define SZ 3
453 #define INIT init_trans_3_GLdouble_raw
454 #define DEST_4F trans_3_GLdouble_4f_raw
455 #define DEST_4FN trans_3_GLdouble_4fn_raw
456 #define DEST_4UB trans_3_GLdouble_4ub_raw
457 #define DEST_4US trans_3_GLdouble_4us_raw
458 #define DEST_3FN trans_3_GLdouble_3fn_raw
459 #include "m_trans_tmp.h"
460 
461 #define SZ 2
462 #define INIT init_trans_2_GLdouble_raw
463 #define DEST_4F trans_2_GLdouble_4f_raw
464 #define DEST_4FN trans_2_GLdouble_4fn_raw
465 #include "m_trans_tmp.h"
466 
467 #define SZ 1
468 #define INIT init_trans_1_GLdouble_raw
469 #define DEST_4F trans_1_GLdouble_4f_raw
470 #define DEST_4FN trans_1_GLdouble_4fn_raw
471 #define DEST_1UB trans_1_GLdouble_1ub_raw
472 #define DEST_1UI trans_1_GLdouble_1ui_raw
473 #define DEST_1F trans_1_GLdouble_1f_raw
474 #include "m_trans_tmp.h"
475 
476 #undef SRC
477 #undef SRC_IDX
478 
479 /* GL_FLOAT
480  */
481 #define SRC GLfloat
482 #define SRC_IDX TYPE_IDX(GL_FLOAT)
483 #define SZ 4
484 #define INIT init_trans_4_GLfloat_raw
485 #define DEST_4UB trans_4_GLfloat_4ub_raw
486 #define DEST_4US trans_4_GLfloat_4us_raw
487 #define DEST_4F  trans_4_GLfloat_4f_raw
488 #define DEST_4FN  trans_4_GLfloat_4fn_raw
489 #include "m_trans_tmp.h"
490 
491 #define SZ 3
492 #define INIT init_trans_3_GLfloat_raw
493 #define DEST_4F  trans_3_GLfloat_4f_raw
494 #define DEST_4FN  trans_3_GLfloat_4fn_raw
495 #define DEST_4UB trans_3_GLfloat_4ub_raw
496 #define DEST_4US trans_3_GLfloat_4us_raw
497 #define DEST_3FN trans_3_GLfloat_3fn_raw
498 #include "m_trans_tmp.h"
499 
500 #define SZ 2
501 #define INIT init_trans_2_GLfloat_raw
502 #define DEST_4F trans_2_GLfloat_4f_raw
503 #define DEST_4FN trans_2_GLfloat_4fn_raw
504 #include "m_trans_tmp.h"
505 
506 #define SZ 1
507 #define INIT init_trans_1_GLfloat_raw
508 #define DEST_4F  trans_1_GLfloat_4f_raw
509 #define DEST_4FN  trans_1_GLfloat_4fn_raw
510 #define DEST_1UB trans_1_GLfloat_1ub_raw
511 #define DEST_1UI trans_1_GLfloat_1ui_raw
512 #define DEST_1F trans_1_GLfloat_1f_raw
513 
514 #include "m_trans_tmp.h"
515 
516 #undef SRC
517 #undef SRC_IDX
518 #undef TRX_3FN
519 #undef TRX_4F
520 #undef TRX_4FN
521 #undef TRX_UB
522 #undef TRX_US
523 #undef TRX_UI
524 
525 
trans_4_GLubyte_4ub_raw(GLubyte (* t)[4],const void * Ptr,GLuint stride,ARGS)526 static void trans_4_GLubyte_4ub_raw(GLubyte (*t)[4],
527 				    const void *Ptr,
528 				    GLuint stride,
529 				    ARGS )
530 {
531    const GLubyte *f = (GLubyte *) Ptr + SRC_START * stride;
532    GLuint i;
533 
534    if (((((uintptr_t) f | (uintptr_t) stride)) & 3L) == 0L) {
535       /* Aligned.
536        */
537       for (i = DST_START ; i < n ; i++, f += stride) {
538 	 COPY_4UBV( t[i], f );
539       }
540    } else {
541       for (i = DST_START ; i < n ; i++, f += stride) {
542 	 t[i][0] = f[0];
543 	 t[i][1] = f[1];
544 	 t[i][2] = f[2];
545 	 t[i][3] = f[3];
546       }
547    }
548 }
549 
550 
init_translate_raw(void)551 static void init_translate_raw(void)
552 {
553    memset( TAB(_1ui), 0, sizeof(TAB(_1ui)) );
554    memset( TAB(_1ub), 0, sizeof(TAB(_1ub)) );
555    memset( TAB(_3fn),  0, sizeof(TAB(_3fn)) );
556    memset( TAB(_4ub), 0, sizeof(TAB(_4ub)) );
557    memset( TAB(_4us), 0, sizeof(TAB(_4us)) );
558    memset( TAB(_4f),  0, sizeof(TAB(_4f)) );
559    memset( TAB(_4fn),  0, sizeof(TAB(_4fn)) );
560 
561    init_trans_4_GLbyte_raw();
562    init_trans_3_GLbyte_raw();
563    init_trans_2_GLbyte_raw();
564    init_trans_1_GLbyte_raw();
565    init_trans_1_GLubyte_raw();
566    init_trans_3_GLubyte_raw();
567    init_trans_4_GLubyte_raw();
568    init_trans_4_GLshort_raw();
569    init_trans_3_GLshort_raw();
570    init_trans_2_GLshort_raw();
571    init_trans_1_GLshort_raw();
572    init_trans_4_GLushort_raw();
573    init_trans_3_GLushort_raw();
574    init_trans_2_GLushort_raw();
575    init_trans_1_GLushort_raw();
576    init_trans_4_GLint_raw();
577    init_trans_3_GLint_raw();
578    init_trans_2_GLint_raw();
579    init_trans_1_GLint_raw();
580    init_trans_4_GLuint_raw();
581    init_trans_3_GLuint_raw();
582    init_trans_2_GLuint_raw();
583    init_trans_1_GLuint_raw();
584    init_trans_4_GLdouble_raw();
585    init_trans_3_GLdouble_raw();
586    init_trans_2_GLdouble_raw();
587    init_trans_1_GLdouble_raw();
588    init_trans_4_GLfloat_raw();
589    init_trans_3_GLfloat_raw();
590    init_trans_2_GLfloat_raw();
591    init_trans_1_GLfloat_raw();
592 
593    TAB(_4ub)[4][TYPE_IDX(GL_UNSIGNED_BYTE)] = trans_4_GLubyte_4ub_raw;
594 }
595 
596 
597 #undef TAB
598 #ifdef CLASS
599 #undef CLASS
600 #endif
601 #undef ARGS
602 #undef SRC_START
603 #undef DST_START
604 #undef NEXT_F
605 #undef NEXT_F2
606 
607 
608 
609 
610 
_math_init_translate(void)611 void _math_init_translate( void )
612 {
613    init_translate_raw();
614 }
615 
616 
617 /**
618  * Translate vector of values to GLfloat [1].
619  */
_math_trans_1f(GLfloat * to,const void * ptr,GLuint stride,GLenum type,GLuint start,GLuint n)620 void _math_trans_1f(GLfloat *to,
621 		    const void *ptr,
622 		    GLuint stride,
623 		    GLenum type,
624 		    GLuint start,
625 		    GLuint n )
626 {
627    _math_trans_1f_tab[TYPE_IDX(type)]( to, ptr, stride, start, n );
628 }
629 
630 /**
631  * Translate vector of values to GLuint [1].
632  */
_math_trans_1ui(GLuint * to,const void * ptr,GLuint stride,GLenum type,GLuint start,GLuint n)633 void _math_trans_1ui(GLuint *to,
634 		     const void *ptr,
635 		     GLuint stride,
636 		     GLenum type,
637 		     GLuint start,
638 		     GLuint n )
639 {
640    _math_trans_1ui_tab[TYPE_IDX(type)]( to, ptr, stride, start, n );
641 }
642 
643 /**
644  * Translate vector of values to GLubyte [1].
645  */
_math_trans_1ub(GLubyte * to,const void * ptr,GLuint stride,GLenum type,GLuint start,GLuint n)646 void _math_trans_1ub(GLubyte *to,
647 		     const void *ptr,
648 		     GLuint stride,
649 		     GLenum type,
650 		     GLuint start,
651 		     GLuint n )
652 {
653    _math_trans_1ub_tab[TYPE_IDX(type)]( to, ptr, stride, start, n );
654 }
655 
656 
657 /**
658  * Translate vector of values to GLubyte [4].
659  */
_math_trans_4ub(GLubyte (* to)[4],const void * ptr,GLuint stride,GLenum type,GLuint size,GLuint start,GLuint n)660 void _math_trans_4ub(GLubyte (*to)[4],
661 		     const void *ptr,
662 		     GLuint stride,
663 		     GLenum type,
664 		     GLuint size,
665 		     GLuint start,
666 		     GLuint n )
667 {
668    _math_trans_4ub_tab[size][TYPE_IDX(type)]( to, ptr, stride, start, n );
669 }
670 
671 /**
672  * Translate vector of values to GLushort [4].
673  */
_math_trans_4us(GLushort (* to)[4],const void * ptr,GLuint stride,GLenum type,GLuint size,GLuint start,GLuint n)674 void _math_trans_4us(GLushort (*to)[4],
675 		     const void *ptr,
676 		     GLuint stride,
677 		     GLenum type,
678 		     GLuint size,
679 		     GLuint start,
680 		     GLuint n )
681 {
682    _math_trans_4us_tab[size][TYPE_IDX(type)]( to, ptr, stride, start, n );
683 }
684 
685 /**
686  * Translate vector of values to GLfloat [4].
687  */
_math_trans_4f(GLfloat (* to)[4],const void * ptr,GLuint stride,GLenum type,GLuint size,GLuint start,GLuint n)688 void _math_trans_4f(GLfloat (*to)[4],
689 		    const void *ptr,
690 		    GLuint stride,
691 		    GLenum type,
692 		    GLuint size,
693 		    GLuint start,
694 		    GLuint n )
695 {
696    _math_trans_4f_tab[size][TYPE_IDX(type)]( to, ptr, stride, start, n );
697 }
698 
699 /**
700  * Translate vector of values to GLfloat[4], normalized to [-1, 1].
701  */
_math_trans_4fn(GLfloat (* to)[4],const void * ptr,GLuint stride,GLenum type,GLuint size,GLuint start,GLuint n)702 void _math_trans_4fn(GLfloat (*to)[4],
703 		    const void *ptr,
704 		    GLuint stride,
705 		    GLenum type,
706 		    GLuint size,
707 		    GLuint start,
708 		    GLuint n )
709 {
710    _math_trans_4fn_tab[size][TYPE_IDX(type)]( to, ptr, stride, start, n );
711 }
712 
713 /**
714  * Translate vector of values to GLfloat[3], normalized to [-1, 1].
715  */
_math_trans_3fn(GLfloat (* to)[3],const void * ptr,GLuint stride,GLenum type,GLuint start,GLuint n)716 void _math_trans_3fn(GLfloat (*to)[3],
717 		    const void *ptr,
718 		    GLuint stride,
719 		    GLenum type,
720 		    GLuint start,
721 		    GLuint n )
722 {
723    _math_trans_3fn_tab[TYPE_IDX(type)]( to, ptr, stride, start, n );
724 }
725