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