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