Home | History | Annotate | Download | only in math
      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 
    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 
    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 
    611 void _math_init_translate( void )
    612 {
    613    init_translate_raw();
    614 }
    615 
    616 
    617 /**
    618  * Translate vector of values to GLfloat [1].
    619  */
    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  */
    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  */
    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  */
    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  */
    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  */
    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  */
    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  */
    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