Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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.