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