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 #ifndef _M_TRANSLATE_H_
27 #define _M_TRANSLATE_H_
28 
29 #include "main/compiler.h"
30 #include "main/glheader.h"
31 #include "main/mtypes.h"		/* hack for GLchan */
32 #include "swrast/s_chan.h"
33 
34 /**
35  * Array translation.
36  * For example, convert array of GLushort[3] to GLfloat[4].
37  * The function name specifies the destination format/size.
38  * \param  to  the destination address
39  * \param  ptr  the source address
40  * \param  stride  the source stride (in bytes) between elements
41  * \param  type  the source datatype (GL_SHORT, GL_UNSIGNED_INT, etc)
42  * \param  size  number of values per element in source array (1,2,3 or 4)
43  * \param  start  first element in source array to convert
44  * \param  n  number of elements to convert
45  *
46  * Note: "element" means a tuple like GLfloat[3] or GLubyte[4].
47  */
48 
49 
50 extern void _math_trans_1f(GLfloat *to,
51 			   CONST void *ptr,
52 			   GLuint stride,
53 			   GLenum type,
54 			   GLuint start,
55 			   GLuint n );
56 
57 extern void _math_trans_1ui(GLuint *to,
58 			    CONST void *ptr,
59 			    GLuint stride,
60 			    GLenum type,
61 			    GLuint start,
62 			    GLuint n );
63 
64 extern void _math_trans_1ub(GLubyte *to,
65 			    CONST void *ptr,
66 			    GLuint stride,
67 			    GLenum type,
68 			    GLuint start,
69 			    GLuint n );
70 
71 extern void _math_trans_4ub(GLubyte (*to)[4],
72 			    CONST void *ptr,
73 			    GLuint stride,
74 			    GLenum type,
75 			    GLuint size,
76 			    GLuint start,
77 			    GLuint n );
78 
79 extern void _math_trans_4chan( GLchan (*to)[4],
80 			       CONST void *ptr,
81 			       GLuint stride,
82 			       GLenum type,
83 			       GLuint size,
84 			       GLuint start,
85 			       GLuint n );
86 
87 extern void _math_trans_4us(GLushort (*to)[4],
88 			    CONST void *ptr,
89 			    GLuint stride,
90 			    GLenum type,
91 			    GLuint size,
92 			    GLuint start,
93 			    GLuint n );
94 
95 /** Convert to floats w/out normalization (i.e. just cast) */
96 extern void _math_trans_4f(GLfloat (*to)[4],
97 			   CONST void *ptr,
98 			   GLuint stride,
99 			   GLenum type,
100 			   GLuint size,
101 			   GLuint start,
102 			   GLuint n );
103 
104 /** Convert to normalized floats in [0,1] or [-1, 1] */
105 extern void _math_trans_4fn(GLfloat (*to)[4],
106 			    CONST void *ptr,
107 			    GLuint stride,
108 			    GLenum type,
109 			    GLuint size,
110 			    GLuint start,
111 			    GLuint n );
112 
113 extern void _math_trans_3fn(GLfloat (*to)[3],
114 			   CONST void *ptr,
115 			   GLuint stride,
116 			   GLenum type,
117 			   GLuint start,
118 			   GLuint n );
119 
120 extern void _math_init_translate( void );
121 
122 
123 #endif
124