msi: Make WHEREVIEW able to deal directly with multiple tables.
[wine] / include / d3dx9math.h
1 /*
2  * Copyright (C) 2007 David Adam
3  * Copyright (C) 2007 Tony Wasserka
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18  */
19
20 #include <d3dx9.h>
21
22 #ifndef __D3DX9MATH_H__
23 #define __D3DX9MATH_H__
24
25 #include <math.h>
26
27 #define D3DX_PI    ((FLOAT)3.141592654)
28 #define D3DX_1BYPI ((FLOAT)0.318309886)
29
30 #define D3DXToRadian(degree) ((degree) * (D3DX_PI / 180.0f))
31 #define D3DXToDegree(radian) ((radian) * (180.0f / D3DX_PI))
32
33
34
35 typedef struct D3DXVECTOR2
36 {
37 #ifdef __cplusplus
38     D3DXVECTOR2();
39     D3DXVECTOR2(CONST FLOAT *pf);
40     D3DXVECTOR2(FLOAT fx, FLOAT fy);
41
42     operator FLOAT* ();
43     operator CONST FLOAT* () const;
44
45     D3DXVECTOR2& operator += (CONST D3DXVECTOR2&);
46     D3DXVECTOR2& operator -= (CONST D3DXVECTOR2&);
47     D3DXVECTOR2& operator *= (FLOAT);
48     D3DXVECTOR2& operator /= (FLOAT);
49
50     D3DXVECTOR2 operator + () const;
51     D3DXVECTOR2 operator - () const;
52
53     D3DXVECTOR2 operator + (CONST D3DXVECTOR2&) const;
54     D3DXVECTOR2 operator - (CONST D3DXVECTOR2&) const;
55     D3DXVECTOR2 operator * (FLOAT) const;
56     D3DXVECTOR2 operator / (FLOAT) const;
57
58     friend D3DXVECTOR2 operator * (FLOAT, CONST D3DXVECTOR2&);
59
60     BOOL operator == (CONST D3DXVECTOR2&) const;
61     BOOL operator != (CONST D3DXVECTOR2&) const;
62 #endif /* __cplusplus */
63     FLOAT x, y;
64 } D3DXVECTOR2, *LPD3DXVECTOR2;
65
66 #ifdef __cplusplus
67 typedef struct D3DXVECTOR3 : public D3DVECTOR
68 {
69     D3DXVECTOR3();
70     D3DXVECTOR3(CONST FLOAT *pf);
71     D3DXVECTOR3(CONST D3DVECTOR& v);
72     D3DXVECTOR3(FLOAT fx, FLOAT fy, FLOAT fz);
73
74     operator FLOAT* ();
75     operator CONST FLOAT* () const;
76
77     D3DXVECTOR3& operator += (CONST D3DXVECTOR3&);
78     D3DXVECTOR3& operator -= (CONST D3DXVECTOR3&);
79     D3DXVECTOR3& operator *= (FLOAT);
80     D3DXVECTOR3& operator /= (FLOAT);
81
82     D3DXVECTOR3 operator + () const;
83     D3DXVECTOR3 operator - () const;
84
85     D3DXVECTOR3 operator + (CONST D3DXVECTOR3&) const;
86     D3DXVECTOR3 operator - (CONST D3DXVECTOR3&) const;
87     D3DXVECTOR3 operator * (FLOAT) const;
88     D3DXVECTOR3 operator / (FLOAT) const;
89
90     friend D3DXVECTOR3 operator * (FLOAT, CONST struct D3DXVECTOR3&);
91
92     BOOL operator == (CONST D3DXVECTOR3&) const;
93     BOOL operator != (CONST D3DXVECTOR3&) const;
94 } D3DXVECTOR3, *LPD3DXVECTOR3;
95 #else /* !__cplusplus */
96 typedef struct _D3DVECTOR D3DXVECTOR3, *LPD3DXVECTOR3;
97 #endif /* !__cplusplus */
98
99 typedef struct D3DXVECTOR4
100 {
101 #ifdef __cplusplus
102     D3DXVECTOR4();
103     D3DXVECTOR4(CONST FLOAT *pf);
104     D3DXVECTOR4(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw);
105
106     operator FLOAT* ();
107     operator CONST FLOAT* () const;
108
109     D3DXVECTOR4& operator += (CONST D3DXVECTOR4&);
110     D3DXVECTOR4& operator -= (CONST D3DXVECTOR4&);
111     D3DXVECTOR4& operator *= (FLOAT);
112     D3DXVECTOR4& operator /= (FLOAT);
113
114     D3DXVECTOR4 operator + () const;
115     D3DXVECTOR4 operator - () const;
116
117     D3DXVECTOR4 operator + (CONST D3DXVECTOR4&) const;
118     D3DXVECTOR4 operator - (CONST D3DXVECTOR4&) const;
119     D3DXVECTOR4 operator * (FLOAT) const;
120     D3DXVECTOR4 operator / (FLOAT) const;
121
122     friend D3DXVECTOR4 operator * (FLOAT, CONST D3DXVECTOR4&);
123
124     BOOL operator == (CONST D3DXVECTOR4&) const;
125     BOOL operator != (CONST D3DXVECTOR4&) const;
126 #endif /* __cplusplus */
127     FLOAT x, y, z, w;
128 } D3DXVECTOR4, *LPD3DXVECTOR4;
129
130 #ifdef __cplusplus
131 typedef struct D3DXMATRIX : public D3DMATRIX
132 {
133     D3DXMATRIX();
134     D3DXMATRIX(CONST FLOAT *pf);
135     D3DXMATRIX(CONST D3DMATRIX& mat);
136     D3DXMATRIX(FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14,
137                FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24,
138                FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34,
139                FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44);
140
141     FLOAT& operator () (UINT row, UINT col);
142     FLOAT operator () (UINT row, UINT col) const;
143
144     operator FLOAT* ();
145     operator CONST FLOAT* () const;
146
147     D3DXMATRIX& operator *= (CONST D3DXMATRIX&);
148     D3DXMATRIX& operator += (CONST D3DXMATRIX&);
149     D3DXMATRIX& operator -= (CONST D3DXMATRIX&);
150     D3DXMATRIX& operator *= (FLOAT);
151     D3DXMATRIX& operator /= (FLOAT);
152
153     D3DXMATRIX operator + () const;
154     D3DXMATRIX operator - () const;
155
156     D3DXMATRIX operator * (CONST D3DXMATRIX&) const;
157     D3DXMATRIX operator + (CONST D3DXMATRIX&) const;
158     D3DXMATRIX operator - (CONST D3DXMATRIX&) const;
159     D3DXMATRIX operator * (FLOAT) const;
160     D3DXMATRIX operator / (FLOAT) const;
161
162     friend D3DXMATRIX operator * (FLOAT, CONST D3DXMATRIX&);
163
164     BOOL operator == (CONST D3DXMATRIX&) const;
165     BOOL operator != (CONST D3DXMATRIX&) const;
166 } D3DXMATRIX, *LPD3DXMATRIX;
167 #else /* !__cplusplus */
168 typedef struct _D3DMATRIX D3DXMATRIX, *LPD3DXMATRIX;
169 #endif /* !__cplusplus */
170
171 typedef struct D3DXQUATERNION
172 {
173 #ifdef __cplusplus
174     D3DXQUATERNION();
175     D3DXQUATERNION(CONST FLOAT *pf);
176     D3DXQUATERNION(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw);
177
178     operator FLOAT* ();
179     operator CONST FLOAT* () const;
180
181     D3DXQUATERNION& operator += (CONST D3DXQUATERNION&);
182     D3DXQUATERNION& operator -= (CONST D3DXQUATERNION&);
183     D3DXQUATERNION& operator *= (CONST D3DXQUATERNION&);
184     D3DXQUATERNION& operator *= (FLOAT);
185     D3DXQUATERNION& operator /= (FLOAT);
186
187     D3DXQUATERNION  operator + () const;
188     D3DXQUATERNION  operator - () const;
189
190     D3DXQUATERNION operator + (CONST D3DXQUATERNION&) const;
191     D3DXQUATERNION operator - (CONST D3DXQUATERNION&) const;
192     D3DXQUATERNION operator * (CONST D3DXQUATERNION&) const;
193     D3DXQUATERNION operator * (FLOAT) const;
194     D3DXQUATERNION operator / (FLOAT) const;
195
196     friend D3DXQUATERNION operator * (FLOAT, CONST D3DXQUATERNION&);
197
198     BOOL operator == (CONST D3DXQUATERNION&) const;
199     BOOL operator != (CONST D3DXQUATERNION&) const;
200 #endif /* __cplusplus */
201     FLOAT x, y, z, w;
202 } D3DXQUATERNION, *LPD3DXQUATERNION;
203
204 typedef struct D3DXPLANE
205 {
206 #ifdef __cplusplus
207     D3DXPLANE();
208     D3DXPLANE(CONST FLOAT *pf);
209     D3DXPLANE(FLOAT fa, FLOAT fb, FLOAT fc, FLOAT fd);
210
211     operator FLOAT* ();
212     operator CONST FLOAT* () const;
213
214     D3DXPLANE operator + () const;
215     D3DXPLANE operator - () const;
216
217     BOOL operator == (CONST D3DXPLANE&) const;
218     BOOL operator != (CONST D3DXPLANE&) const;
219 #endif /* __cplusplus */
220     FLOAT a, b, c, d;
221 } D3DXPLANE, *LPD3DXPLANE;
222
223 typedef struct D3DXCOLOR
224 {
225 #ifdef __cplusplus
226     D3DXCOLOR();
227     D3DXCOLOR(DWORD col);
228     D3DXCOLOR(CONST FLOAT *pf);
229     D3DXCOLOR(CONST D3DCOLORVALUE& col);
230     D3DXCOLOR(FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa);
231
232     operator DWORD () const;
233
234     operator FLOAT* ();
235     operator CONST FLOAT* () const;
236
237     operator D3DCOLORVALUE* ();
238     operator CONST D3DCOLORVALUE* () const;
239
240     operator D3DCOLORVALUE& ();
241     operator CONST D3DCOLORVALUE& () const;
242
243     D3DXCOLOR& operator += (CONST D3DXCOLOR&);
244     D3DXCOLOR& operator -= (CONST D3DXCOLOR&);
245     D3DXCOLOR& operator *= (FLOAT);
246     D3DXCOLOR& operator /= (FLOAT);
247
248     D3DXCOLOR operator + () const;
249     D3DXCOLOR operator - () const;
250
251     D3DXCOLOR operator + (CONST D3DXCOLOR&) const;
252     D3DXCOLOR operator - (CONST D3DXCOLOR&) const;
253     D3DXCOLOR operator * (FLOAT) const;
254     D3DXCOLOR operator / (FLOAT) const;
255
256     friend D3DXCOLOR operator * (FLOAT, CONST D3DXCOLOR&);
257
258     BOOL operator == (CONST D3DXCOLOR&) const;
259     BOOL operator != (CONST D3DXCOLOR&) const;
260 #endif /* __cplusplus */
261     FLOAT r, g, b, a;
262 } D3DXCOLOR, *LPD3DXCOLOR;
263
264 typedef struct D3DXFLOAT16
265 {
266 #ifdef __cplusplus
267     D3DXFLOAT16();
268     D3DXFLOAT16(FLOAT f);
269     D3DXFLOAT16(CONST D3DXFLOAT16 &f);
270
271     operator FLOAT ();
272
273     BOOL operator == (CONST D3DXFLOAT16 &) const;
274     BOOL operator != (CONST D3DXFLOAT16 &) const;
275 #endif /* __cplusplus */
276     WORD value;
277 } D3DXFLOAT16, *LPD3DXFLOAT16;
278
279 #ifdef __cplusplus
280 extern "C" {
281 #endif
282
283 D3DXCOLOR* WINAPI D3DXColorAdjustContrast(D3DXCOLOR *pout, CONST D3DXCOLOR *pc, FLOAT s);
284 D3DXCOLOR* WINAPI D3DXColorAdjustSaturation(D3DXCOLOR *pout, CONST D3DXCOLOR *pc, FLOAT s);
285
286 FLOAT WINAPI D3DXFresnelTerm(FLOAT costheta, FLOAT refractionindex);
287
288 D3DXMATRIX* WINAPI D3DXMatrixAffineTransformation(D3DXMATRIX *pout, FLOAT scaling, CONST D3DXVECTOR3 *rotationcenter, CONST D3DXQUATERNION *rotation, CONST D3DXVECTOR3 *translation);
289 D3DXMATRIX* WINAPI D3DXMatrixAffineTransformation2D(D3DXMATRIX *pout, FLOAT scaling, CONST D3DXVECTOR2 *protationcenter, FLOAT rotation, CONST D3DXVECTOR2 *ptranslation);
290 HRESULT WINAPI D3DXMatrixDecompose(D3DXVECTOR3 *poutscale, D3DXQUATERNION *poutrotation, D3DXVECTOR3 *pouttranslation, CONST D3DXMATRIX *pm);
291 FLOAT WINAPI D3DXMatrixDeterminant(CONST D3DXMATRIX *pm);
292 D3DXMATRIX* WINAPI D3DXMatrixInverse(D3DXMATRIX *pout, FLOAT *pdeterminant, CONST D3DXMATRIX *pm);
293 D3DXMATRIX* WINAPI D3DXMatrixLookAtLH(D3DXMATRIX *pout, CONST D3DXVECTOR3 *peye, CONST D3DXVECTOR3 *pat, CONST D3DXVECTOR3 *pup);
294 D3DXMATRIX* WINAPI D3DXMatrixLookAtRH(D3DXMATRIX *pout, CONST D3DXVECTOR3 *peye, CONST D3DXVECTOR3 *pat, CONST D3DXVECTOR3 *pup);
295 D3DXMATRIX* WINAPI D3DXMatrixMultiply(D3DXMATRIX *pout, CONST D3DXMATRIX *pm1, CONST D3DXMATRIX *pm2);
296 D3DXMATRIX* WINAPI D3DXMatrixMultiplyTranspose(D3DXMATRIX *pout, CONST D3DXMATRIX *pm1, CONST D3DXMATRIX *pm2);
297 D3DXMATRIX* WINAPI D3DXMatrixOrthoLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
298 D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
299 D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterRH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
300 D3DXMATRIX* WINAPI D3DXMatrixOrthoRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
301 D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovLH(D3DXMATRIX *pout, FLOAT fovy, FLOAT aspect, FLOAT zn, FLOAT zf);
302 D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovRH(D3DXMATRIX *pout, FLOAT fovy, FLOAT aspect, FLOAT zn, FLOAT zf);
303 D3DXMATRIX* WINAPI D3DXMatrixPerspectiveLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
304 D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
305 D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterRH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
306 D3DXMATRIX* WINAPI D3DXMatrixPerspectiveRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
307 D3DXMATRIX* WINAPI D3DXMatrixReflect(D3DXMATRIX *pout, CONST D3DXPLANE *pplane);
308 D3DXMATRIX* WINAPI D3DXMatrixRotationAxis(D3DXMATRIX *pout, CONST D3DXVECTOR3 *pv, FLOAT angle);
309 D3DXMATRIX* WINAPI D3DXMatrixRotationQuaternion(D3DXMATRIX *pout, CONST D3DXQUATERNION *pq);
310 D3DXMATRIX* WINAPI D3DXMatrixRotationX(D3DXMATRIX *pout, FLOAT angle);
311 D3DXMATRIX* WINAPI D3DXMatrixRotationY(D3DXMATRIX *pout, FLOAT angle);
312 D3DXMATRIX* WINAPI D3DXMatrixRotationYawPitchRoll(D3DXMATRIX *pout, FLOAT yaw, FLOAT pitch, FLOAT roll);
313 D3DXMATRIX* WINAPI D3DXMatrixRotationZ(D3DXMATRIX *pout, FLOAT angle);
314 D3DXMATRIX* WINAPI D3DXMatrixScaling(D3DXMATRIX *pout, FLOAT sx, FLOAT sy, FLOAT sz);
315 D3DXMATRIX* WINAPI D3DXMatrixShadow(D3DXMATRIX *pout, CONST D3DXVECTOR4 *plight, CONST D3DXPLANE *pPlane);
316 D3DXMATRIX* WINAPI D3DXMatrixTransformation(D3DXMATRIX *pout, CONST D3DXVECTOR3 *pscalingcenter, CONST D3DXQUATERNION *pscalingrotation, CONST D3DXVECTOR3 *pscaling, CONST D3DXVECTOR3 *protationcenter, CONST D3DXQUATERNION *protation, CONST D3DXVECTOR3 *ptranslation);
317 D3DXMATRIX* WINAPI D3DXMatrixTransformation2D(D3DXMATRIX *pout, CONST D3DXVECTOR2 *pscalingcenter, FLOAT scalingrotation, CONST D3DXVECTOR2 *pscaling, CONST D3DXVECTOR2 *protationcenter, FLOAT rotation, CONST D3DXVECTOR2 *ptranslation);
318 D3DXMATRIX* WINAPI D3DXMatrixTranslation(D3DXMATRIX *pout, FLOAT x, FLOAT y, FLOAT z);
319 D3DXMATRIX* WINAPI D3DXMatrixTranspose(D3DXMATRIX *pout, CONST D3DXMATRIX *pm);
320
321 D3DXPLANE* WINAPI D3DXPlaneFromPointNormal(D3DXPLANE *pout, CONST D3DXVECTOR3 *pvpoint, CONST D3DXVECTOR3 *pvnormal);
322 D3DXPLANE* WINAPI D3DXPlaneFromPoints(D3DXPLANE *pout, CONST D3DXVECTOR3 *pv1, CONST D3DXVECTOR3 *pv2, CONST D3DXVECTOR3 *pv3);
323 D3DXVECTOR3* WINAPI D3DXPlaneIntersectLine(D3DXVECTOR3 *pout, CONST D3DXPLANE *pp, CONST D3DXVECTOR3 *pv1, CONST D3DXVECTOR3 *pv2);
324 D3DXPLANE* WINAPI D3DXPlaneNormalize(D3DXPLANE *pout, CONST D3DXPLANE *pp);
325 D3DXPLANE* WINAPI D3DXPlaneTransform(D3DXPLANE *pout, CONST D3DXPLANE *pplane, CONST D3DXMATRIX *pm);
326 D3DXPLANE* WINAPI D3DXPlaneTransformArray(D3DXPLANE *pout, UINT outstride, CONST D3DXPLANE *pplane, UINT pstride, CONST D3DXMATRIX *pm, UINT n);
327
328 D3DXQUATERNION* WINAPI D3DXQuaternionBaryCentric(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq1, CONST D3DXQUATERNION *pq2, CONST D3DXQUATERNION *pq3, FLOAT f, FLOAT g);
329 D3DXQUATERNION* WINAPI D3DXQuaternionExp(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq);
330 D3DXQUATERNION* WINAPI D3DXQuaternionInverse(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq);
331 D3DXQUATERNION* WINAPI D3DXQuaternionLn(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq);
332 D3DXQUATERNION* WINAPI D3DXQuaternionMultiply(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq1, CONST D3DXQUATERNION *pq2);
333 D3DXQUATERNION* WINAPI D3DXQuaternionNormalize(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq);
334 D3DXQUATERNION* WINAPI D3DXQuaternionRotationAxis(D3DXQUATERNION *pout, CONST D3DXVECTOR3 *pv, FLOAT angle);
335 D3DXQUATERNION* WINAPI D3DXQuaternionRotationMatrix(D3DXQUATERNION *pout, CONST D3DXMATRIX *pm);
336 D3DXQUATERNION* WINAPI D3DXQuaternionRotationYawPitchRoll(D3DXQUATERNION *pout, FLOAT yaw, FLOAT pitch, FLOAT roll);
337 D3DXQUATERNION* WINAPI D3DXQuaternionSlerp(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq1, CONST D3DXQUATERNION *pq2, FLOAT t);
338 D3DXQUATERNION* WINAPI D3DXQuaternionSquad(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq1, CONST D3DXQUATERNION *pq2, CONST D3DXQUATERNION *pq3, CONST D3DXQUATERNION *pq4, FLOAT t);
339 void WINAPI D3DXQuaternionToAxisAngle(CONST D3DXQUATERNION *pq, D3DXVECTOR3 *paxis, FLOAT *pangle);
340
341 D3DXVECTOR2* WINAPI D3DXVec2BaryCentric(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv1, CONST D3DXVECTOR2 *pv2, CONST D3DXVECTOR2 *pv3, FLOAT f, FLOAT g);
342 D3DXVECTOR2* WINAPI D3DXVec2CatmullRom(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv0, CONST D3DXVECTOR2 *pv1, CONST D3DXVECTOR2 *pv2, CONST D3DXVECTOR2 *pv3, FLOAT s);
343 D3DXVECTOR2* WINAPI D3DXVec2Hermite(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv1, CONST D3DXVECTOR2 *pt1, CONST D3DXVECTOR2 *pv2, CONST D3DXVECTOR2 *pt2, FLOAT s);
344 D3DXVECTOR2* WINAPI D3DXVec2Normalize(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv);
345 D3DXVECTOR4* WINAPI D3DXVec2Transform(D3DXVECTOR4 *pout, CONST D3DXVECTOR2 *pv, CONST D3DXMATRIX *pm);
346 D3DXVECTOR4* WINAPI D3DXVec2TransformArray(D3DXVECTOR4 *pout, UINT outstride, CONST D3DXVECTOR2 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n);
347 D3DXVECTOR2* WINAPI D3DXVec2TransformCoord(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv, CONST D3DXMATRIX *pm);
348 D3DXVECTOR2* WINAPI D3DXVec2TransformCoordArray(D3DXVECTOR2 *pout, UINT outstride, CONST D3DXVECTOR2 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n);
349 D3DXVECTOR2* WINAPI D3DXVec2TransformNormal(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv, CONST D3DXMATRIX *pm);
350 D3DXVECTOR2* WINAPI D3DXVec2TransformNormalArray(D3DXVECTOR2 *pout, UINT outstride, CONST D3DXVECTOR2 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n);
351
352 D3DXVECTOR3* WINAPI D3DXVec3BaryCentric(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv1, CONST D3DXVECTOR3 *pv2, CONST D3DXVECTOR3 *pv3, FLOAT f, FLOAT g);
353 D3DXVECTOR3* WINAPI D3DXVec3CatmullRom( D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv0, CONST D3DXVECTOR3 *pv1, CONST D3DXVECTOR3 *pv2, CONST D3DXVECTOR3 *pv3, FLOAT s);
354 D3DXVECTOR3* WINAPI D3DXVec3Hermite(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv1, CONST D3DXVECTOR3 *pt1, CONST D3DXVECTOR3 *pv2, CONST D3DXVECTOR3 *pt2, FLOAT s);
355 D3DXVECTOR3* WINAPI D3DXVec3Normalize(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv);
356 D3DXVECTOR3* WINAPI D3DXVec3Project(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv, CONST D3DVIEWPORT9 *pviewport, CONST D3DXMATRIX *pprojection, CONST D3DXMATRIX *pview, CONST D3DXMATRIX *pworld);
357 D3DXVECTOR3* WINAPI D3DXVec3ProjectArray(D3DXVECTOR3 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DVIEWPORT9 *pviewport, CONST D3DXMATRIX *pprojection, CONST D3DXMATRIX *pview, CONST D3DXMATRIX *pworld, UINT n);
358 D3DXVECTOR4* WINAPI D3DXVec3Transform(D3DXVECTOR4 *pout, CONST D3DXVECTOR3 *pv, CONST D3DXMATRIX *pm);
359 D3DXVECTOR4* WINAPI D3DXVec3TransformArray(D3DXVECTOR4 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n);
360 D3DXVECTOR3* WINAPI D3DXVec3TransformCoord(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv, CONST D3DXMATRIX *pm);
361 D3DXVECTOR3* WINAPI D3DXVec3TransformCoordArray(D3DXVECTOR3 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n);
362 D3DXVECTOR3* WINAPI D3DXVec3TransformNormal(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv, CONST D3DXMATRIX *pm);
363 D3DXVECTOR3* WINAPI D3DXVec3TransformNormalArray(D3DXVECTOR3 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n);
364 D3DXVECTOR3* WINAPI D3DXVec3Unproject(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv, CONST D3DVIEWPORT9 *pviewport, CONST D3DXMATRIX *pprojection, CONST D3DXMATRIX *pview, CONST D3DXMATRIX *pworld);
365 D3DXVECTOR3* WINAPI D3DXVec3UnprojectArray(D3DXVECTOR3 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DVIEWPORT9 *pviewport, CONST D3DXMATRIX *pprojection, CONST D3DXMATRIX *pview, CONST D3DXMATRIX *pworld, UINT n);
366
367 D3DXVECTOR4* WINAPI D3DXVec4BaryCentric(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv1, CONST D3DXVECTOR4 *pv2, CONST D3DXVECTOR4 *pv3, FLOAT f, FLOAT g);
368 D3DXVECTOR4* WINAPI D3DXVec4CatmullRom(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv0, CONST D3DXVECTOR4 *pv1, CONST D3DXVECTOR4 *pv2, CONST D3DXVECTOR4 *pv3, FLOAT s);
369 D3DXVECTOR4* WINAPI D3DXVec4Cross(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv1, CONST D3DXVECTOR4 *pv2, CONST D3DXVECTOR4 *pv3);
370 D3DXVECTOR4* WINAPI D3DXVec4Hermite(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv1, CONST D3DXVECTOR4 *pt1, CONST D3DXVECTOR4 *pv2, CONST D3DXVECTOR4 *pt2, FLOAT s);
371 D3DXVECTOR4* WINAPI D3DXVec4Normalize(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv);
372 D3DXVECTOR4* WINAPI D3DXVec4Transform(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv, CONST D3DXMATRIX *pm);
373 D3DXVECTOR4* WINAPI D3DXVec4TransformArray(D3DXVECTOR4 *pout, UINT outstride, CONST D3DXVECTOR4 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n);
374
375 D3DXFLOAT16 *WINAPI D3DXFloat32To16Array(D3DXFLOAT16 *pout, CONST FLOAT *pin, UINT n);
376 FLOAT *WINAPI D3DXFloat16To32Array(FLOAT *pout, CONST D3DXFLOAT16 *pin, UINT n);
377
378 #ifdef __cplusplus
379 }
380 #endif
381
382 typedef interface ID3DXMatrixStack *LPD3DXMATRIXSTACK;
383
384 DEFINE_GUID(IID_ID3DXMatrixStack,
385 0xc7885ba7, 0xf990, 0x4fe7, 0x92, 0x2d, 0x85, 0x15, 0xe4, 0x77, 0xdd, 0x85);
386
387 #undef INTERFACE
388 #define INTERFACE ID3DXMatrixStack
389
390 DECLARE_INTERFACE_(ID3DXMatrixStack, IUnknown)
391 {
392     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
393     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
394     STDMETHOD_(ULONG,Release)(THIS) PURE;
395     STDMETHOD(Pop)(THIS) PURE;
396     STDMETHOD(Push)(THIS) PURE;
397     STDMETHOD(LoadIdentity)(THIS) PURE;
398     STDMETHOD(LoadMatrix)(THIS_ CONST D3DXMATRIX* pM ) PURE;
399     STDMETHOD(MultMatrix)(THIS_ CONST D3DXMATRIX* pM ) PURE;
400     STDMETHOD(MultMatrixLocal)(THIS_ CONST D3DXMATRIX* pM ) PURE;
401     STDMETHOD(RotateAxis)(THIS_ CONST D3DXVECTOR3* pV, FLOAT Angle) PURE;
402     STDMETHOD(RotateAxisLocal)(THIS_ CONST D3DXVECTOR3* pV, FLOAT Angle) PURE;
403     STDMETHOD(RotateYawPitchRoll)(THIS_ FLOAT Yaw, FLOAT Pitch, FLOAT Roll) PURE;
404     STDMETHOD(RotateYawPitchRollLocal)(THIS_ FLOAT Yaw, FLOAT Pitch, FLOAT Roll) PURE;
405     STDMETHOD(Scale)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;
406     STDMETHOD(ScaleLocal)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;
407     STDMETHOD(Translate)(THIS_ FLOAT x, FLOAT y, FLOAT z ) PURE;
408     STDMETHOD(TranslateLocal)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;
409     STDMETHOD_(D3DXMATRIX*, GetTop)(THIS) PURE;
410 };
411
412 #undef INTERFACE
413
414 #if !defined(__cplusplus) || defined(CINTERFACE)
415
416 #define ID3DXMatrixStack_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
417 #define ID3DXMatrixStack_AddRef(p)                        (p)->lpVtbl->AddRef(p)
418 #define ID3DXMatrixStack_Release(p)                       (p)->lpVtbl->Release(p)
419 #define ID3DXMatrixStack_Pop(p)                           (p)->lpVtbl->Pop(p)
420 #define ID3DXMatrixStack_Push(p)                          (p)->lpVtbl->Push(p)
421 #define ID3DXMatrixStack_LoadIdentity(p)                  (p)->lpVtbl->LoadIdentity(p)
422 #define ID3DXMatrixStack_LoadMatrix(p,a)                  (p)->lpVtbl->LoadMatrix(p,a)
423 #define ID3DXMatrixStack_MultMatrix(p,a)                  (p)->lpVtbl->MultMatrix(p,a)
424 #define ID3DXMatrixStack_MultMatrixLocal(p,a)             (p)->lpVtbl->MultMatrixLocal(p,a)
425 #define ID3DXMatrixStack_RotateAxis(p,a,b)                (p)->lpVtbl->RotateAxis(p,a,b)
426 #define ID3DXMatrixStack_RotateAxisLocal(p,a,b)           (p)->lpVtbl->RotateAxisLocal(p,a,b)
427 #define ID3DXMatrixStack_RotateYawPitchRoll(p,a,b,c)      (p)->lpVtbl->RotateYawPitchRoll(p,a,b,c)
428 #define ID3DXMatrixStack_RotateYawPitchRollLocal(p,a,b,c) (p)->lpVtbl->RotateYawPitchRollLocal(p,a,b,c)
429 #define ID3DXMatrixStack_Scale(p,a,b,c)                   (p)->lpVtbl->Scale(p,a,b,c)
430 #define ID3DXMatrixStack_ScaleLocal(p,a,b,c)              (p)->lpVtbl->ScaleLocal(p,a,b,c)
431 #define ID3DXMatrixStack_Translate(p,a,b,c)               (p)->lpVtbl->Translate(p,a,b,c)
432 #define ID3DXMatrixStack_TranslateLocal(p,a,b,c)          (p)->lpVtbl->TranslateLocal(p,a,b,c)
433 #define ID3DXMatrixStack_GetTop(p)                        (p)->lpVtbl->GetTop(p)
434
435 #endif
436
437 #ifdef __cplusplus
438 extern "C" {
439 #endif
440
441 HRESULT WINAPI D3DXCreateMatrixStack(DWORD flags, LPD3DXMATRIXSTACK* ppstack);
442
443 #ifdef __cplusplus
444 }
445 #endif
446
447 #include <d3dx9math.inl>
448
449 #endif /* __D3DX9MATH_H__ */