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 39typedef void (*trans_1f_func)(GLfloat *to, 40 CONST void *ptr, 41 GLuint stride, 42 GLuint start, 43 GLuint n ); 44 45typedef void (*trans_1ui_func)(GLuint *to, 46 CONST void *ptr, 47 GLuint stride, 48 GLuint start, 49 GLuint n ); 50 51typedef void (*trans_1ub_func)(GLubyte *to, 52 CONST void *ptr, 53 GLuint stride, 54 GLuint start, 55 GLuint n ); 56 57typedef void (*trans_4ub_func)(GLubyte (*to)[4], 58 CONST void *ptr, 59 GLuint stride, 60 GLuint start, 61 GLuint n ); 62 63typedef void (*trans_4us_func)(GLushort (*to)[4], 64 CONST void *ptr, 65 GLuint stride, 66 GLuint start, 67 GLuint n ); 68 69typedef void (*trans_4f_func)(GLfloat (*to)[4], 70 CONST void *ptr, 71 GLuint stride, 72 GLuint start, 73 GLuint n ); 74 75typedef 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 92static trans_1f_func _math_trans_1f_tab[MAX_TYPES]; 93static trans_1ui_func _math_trans_1ui_tab[MAX_TYPES]; 94static trans_1ub_func _math_trans_1ub_tab[MAX_TYPES]; 95static trans_3fn_func _math_trans_3fn_tab[MAX_TYPES]; 96static trans_4ub_func _math_trans_4ub_tab[5][MAX_TYPES]; 97static trans_4us_func _math_trans_4us_tab[5][MAX_TYPES]; 98static trans_4f_func _math_trans_4f_tab[5][MAX_TYPES]; 99static 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 532static 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 557static 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 618void _math_init_translate( void ) 619{ 620 init_translate_raw(); 621} 622 623 624/** 625 * Translate vector of values to GLfloat [1]. 626 */ 627void _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 */ 640void _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 */ 653void _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 */ 667void _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 */ 681void _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 */ 701void _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 */ 715void _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 */ 729void _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 */ 743void _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