ps2sdk  1.1
A collection of Open Source libraries used for developing applications on Sony's PlayStation 2® (PS2).
libvux.h
Go to the documentation of this file.
1 /*
2 # _____ ___ ____ ___ ____
3 # ____| | ____| | | |____|
4 # | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5 #-----------------------------------------------------------------------
6 # (c) 2009 Lion
7 # Licenced under Academic Free License version 2.0
8 # Review ps2sdk README & LICENSE files for further details.
9 */
10 
16 #ifndef __LIBVUX_H__
17 #define __LIBVUX_H__
18 
19 /*
20 
21 y
22 |
23 | z
24 | /
25 | /
26 0-------x
27 
28 row major
29 */
30 
31 
32 #define VU_LIGHT_TYPE_FLAT 0x10
33 
35 typedef struct
36 {
37 
38  float m[4][4];
39 
40 }VU_MATRIX __attribute__((aligned(16)));
41 
43 typedef struct
44 {
45  float x;
46  float y;
47  float z;
48  float w;
49 
50 }VU_VECTOR __attribute__((aligned(16)));
51 
53 typedef struct
54 {
56  unsigned short x;
58  unsigned short y;
59  unsigned int z;
60 
61 }VU_SXYZ;
62 
64 typedef struct
65 {
67  unsigned short x;
69  unsigned short y;
70  unsigned int z:24;
71  unsigned char f;
72 
73 }VU_SXYZF;
74 
76 typedef struct
77 {
78  unsigned char r;
79  unsigned char g;
80  unsigned char b;
81  unsigned char a;
82  float q;
83 
84 }VU_CVECTOR;
85 
87 typedef struct
88 {
89  float r;
90  float g;
91  float b;
92  float a;
93 
95 
96 typedef struct
97 {
100 
102 
103 #ifndef ftoi4
104 #define ftoi4(f) ((int)((f)*16.0f))
105 #endif
106 
107 #ifndef deg2radian
108 #define deg2radian(angle) ((angle*3.1415926535f)/180)
109 #endif
110 
111 #ifndef radian2deg
112 #define radian2deg(radian) ((180.0f / 3.1415926535f) * (radian))
113 #endif
114 
115 #ifdef __cplusplus
116 extern "C" {
117 #endif
118 
119 /* common stuff */
120 extern void VuInit(void);
121 
122 extern void VuSetGeometryXYOffset(unsigned short x, unsigned short y);
123 extern void VuSetProjection(float z);
124 extern void VuSetProjectionMatrix(VU_MATRIX *projection);
125 extern void VuSetProjectionType(unsigned int type);
126 extern void VuSetWorldMatrix(VU_MATRIX *world);
127 extern void VuSetViewMatrix(VU_MATRIX *view);
128 extern void VuSetLocalScreenMatrix(VU_MATRIX *m);
129 extern void VuSetProjectionNearPlaneWH(unsigned int w, unsigned int h);
130 extern void VuSetAmbientLight(float r, float g, float b);
131 
132 /* 99% hw(vu0 macro mode) */
133 extern void Vu0IdMatrix(VU_MATRIX *m);
134 extern void Vu0ResetMatrix(VU_MATRIX *m);
135 //extern void VuxRotMatrixX(VU_MATRIX *m, float x);
136 //extern void VuxRotMatrixY(VU_MATRIX *m, float y);
137 //extern void VuxRotMatrixZ(VU_MATRIX *m, float z);
138 //extern void VuxRotMatrixXYZ(VU_MATRIX *m, float x,float y, float z);
139 extern void Vu0TransMatrix(VU_MATRIX *m, VU_VECTOR *t);
140 extern void Vu0TransMatrixXYZ(VU_MATRIX *m,float x, float y, float z);
141 extern void Vu0ScaleMatrix(VU_MATRIX *m, VU_VECTOR *s);
142 extern void Vu0ScaleMatrixXYZ(VU_MATRIX *m, float x, float y, float z);
143 extern void Vu0MulMatrix(VU_MATRIX *m0, VU_MATRIX *m1, VU_MATRIX *out);
144 //extern void Vu0InverseMatrix(VU_MATRIX *in, VU_MATRIX *out);
145 extern void Vu0ApplyMatrix(VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out);
146 extern void Vu0ApplyRotMatrix(VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out);
147 extern void Vu0CopyMatrix(VU_MATRIX *dest, VU_MATRIX *src);
148 extern float Vu0DotProduct(VU_VECTOR *v0, VU_VECTOR *v1);
149 
150 /* 100% sw */
151 extern void VuxIdMatrix(VU_MATRIX *m);
152 extern void VuxResetMatrix(VU_MATRIX *m);
153 extern void VuxRotMatrix(VU_MATRIX *m, VU_VECTOR *v);
154 extern void VuxRotMatrixX(VU_MATRIX *m, float x);
155 extern void VuxRotMatrixY(VU_MATRIX *m, float y);
156 extern void VuxRotMatrixZ(VU_MATRIX *m, float z);
157 extern void VuxRotMatrixXYZ(VU_MATRIX *m, float x,float y, float z);
158 extern void VuxTransMatrix(VU_MATRIX *m, VU_VECTOR *v0);
159 extern void VuxTransMatrixXYZ(VU_MATRIX *m,float x, float y, float z);
160 extern void VuxScaleMatrix(VU_MATRIX *m, VU_VECTOR *s);
161 extern void VuxScaleMatrixXYZ(VU_MATRIX *m, float x, float y, float z);
162 extern void VuxMulMatrix(VU_MATRIX *m0, VU_MATRIX *m1, VU_MATRIX *out);
163 extern void VuxInverseMatrix(VU_MATRIX *in, VU_MATRIX *mat);
164 extern void VuxCopyMatrix(VU_MATRIX *dest, VU_MATRIX *src);
165 extern void VuxApplyMatrix(VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out);
166 extern void VuxApplyRotMatrix(VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out);
167 extern float VuxDotProduct(VU_VECTOR *v0, VU_VECTOR *v1);
169 extern void VuxCrossProduct0(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *out);
170 extern void VuxVectorNormal(VU_VECTOR *v);
171 extern void VuxVectorNormal0(VU_VECTOR *in, VU_VECTOR *out);
172 
173 extern void VuxApplyMatrixLS(VU_VECTOR *v0, VU_VECTOR *out);
174 extern void VuxApplyRotMatrixLS(VU_VECTOR *v0, VU_VECTOR *out);
175 
176 extern void VuxMakeLocalScreenMatrix(VU_MATRIX *out, VU_MATRIX *world, VU_MATRIX *view);
177 extern void VuxMakeLocalScreenMatrix2(VU_MATRIX *out, VU_MATRIX *world, VU_MATRIX *view, VU_MATRIX *projection);
178 
179 extern void VuxMakeViewMatrix(VU_MATRIX *out, VU_VECTOR *rot, VU_VECTOR *pos, VU_VECTOR *scale);
180 extern void VuxMakeLookAtViewMatrix(VU_MATRIX *out, VU_VECTOR *eye, VU_VECTOR *target, VU_VECTOR *up);
181 extern void VuxMakeProjectionMatrix(VU_MATRIX *proj, float near_plane_w, float near_plane_h, float near_plane_z, float far_plane_z);
182 
184 extern void VuxUpdateLocalScreenMatrix(void);
185 
186 extern void VuxRotTrans(VU_VECTOR *v0, VU_VECTOR *out);
187 extern void VuxRotTrans3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_VECTOR *tv0, VU_VECTOR *tv1, VU_VECTOR *tv2);
188 extern void VuxRotTransN(VU_VECTOR *verts, VU_VECTOR *tverts, unsigned int num_verts);
189 extern void VuxPers(VU_VECTOR *v0, VU_SXYZ *sxyz0);
190 extern void VuxPers3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2);
191 extern void VuxPersN(VU_VECTOR *verts, VU_SXYZ *sxyz, unsigned int num_verts);
192 extern int VuxPersClip3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2);
193 extern float VuxRotTransPers(VU_VECTOR *v0, VU_SXYZ *sxyz0);
194 extern float VuxRotTransPers3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2);
195 extern void VuxRotTransPersN(VU_VECTOR *verts, VU_SXYZ *sxyz, unsigned int num_verts);
196 extern int VuxRotTransPersClip3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2);
197 
198 extern int VuxClipSxyz(VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2);
199 
200 /*lighting*/
201 extern int VuxLightNormal(VU_VECTOR *normal, VU_CVECTOR *col0, void *light, unsigned int light_type, VU_CVECTOR *out0);
202 
203 extern VU_MATRIX VuWorldMatrix;
204 extern VU_MATRIX VuViewMatrix;
207 
208 #ifdef __cplusplus
209 }
210 #endif
211 
212 #endif /* __LIBVUX_H__ */
#define v0
Definition: as_reg_compat.h:35
#define v1
Definition: as_reg_compat.h:36
struct @29::@30 pos
s32 x
Definition: libmouse.c:34
s32 y
Definition: libmouse.c:34
VU_MATRIX VuLocalScreenMatrix
Definition: vux.c:42
void Vu0TransMatrixXYZ(VU_MATRIX *m, float x, float y, float z)
Definition: vuhw.c:77
void Vu0IdMatrix(VU_MATRIX *m)
Definition: vuhw.c:13
void VuxScaleMatrix(VU_MATRIX *m, VU_VECTOR *s)
Definition: vusw.c:216
void Vu0TransMatrix(VU_MATRIX *m, VU_VECTOR *t)
Definition: vuhw.c:61
void VuSetGeometryXYOffset(unsigned short x, unsigned short y)
Definition: vux.c:78
void VuSetProjectionNearPlaneWH(unsigned int w, unsigned int h)
Definition: vux.c:144
void VuSetWorldMatrix(VU_MATRIX *world)
Definition: vux.c:116
int VuxLightNormal(VU_VECTOR *normal, VU_CVECTOR *col0, void *light, unsigned int light_type, VU_CVECTOR *out0)
Definition: vusw.c:920
void VuSetProjectionMatrix(VU_MATRIX *projection)
Definition: vux.c:98
void Vu0CopyMatrix(VU_MATRIX *dest, VU_MATRIX *src)
Definition: vuhw.c:291
void VuSetViewMatrix(VU_MATRIX *view)
Definition: vux.c:125
void VuxPersN(VU_VECTOR *verts, VU_SXYZ *sxyz, unsigned int num_verts)
Definition: vusw.c:767
float VuxRotTransPers3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
Definition: vusw.c:843
void Vu0MulMatrix(VU_MATRIX *m0, VU_MATRIX *m1, VU_MATRIX *out)
Definition: vuhw.c:148
void VuxRotMatrixX(VU_MATRIX *m, float x)
Definition: vusw.c:74
void VuxMakeLookAtViewMatrix(VU_MATRIX *out, VU_VECTOR *eye, VU_VECTOR *target, VU_VECTOR *up)
Definition: vusw.c:563
void VuxScaleMatrixXYZ(VU_MATRIX *m, float x, float y, float z)
Definition: vusw.c:232
void VuxIdMatrix(VU_MATRIX *m)
Definition: vusw.c:30
void VuxRotMatrixXYZ(VU_MATRIX *m, float x, float y, float z)
Definition: vusw.c:157
void VuxPers(VU_VECTOR *v0, VU_SXYZ *sxyz0)
Definition: vusw.c:698
void VuxCrossProduct0(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *out)
Definition: vusw.c:434
void VuxRotMatrixZ(VU_MATRIX *m, float z)
Definition: vusw.c:129
float VuxRotTransPers(VU_VECTOR *v0, VU_SXYZ *sxyz0)
Definition: vusw.c:829
void VuxRotMatrix(VU_MATRIX *m, VU_VECTOR *v)
Definition: vusw.c:51
VU_VECTOR VuxCrossProduct(VU_VECTOR *v0, VU_VECTOR *v1)
Definition: vusw.c:419
VU_MATRIX VuWorldMatrix
Definition: vux.c:21
void VuSetProjection(float z)
Definition: vux.c:88
void VuxApplyMatrix(VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out)
Definition: vusw.c:383
void VuSetProjectionType(unsigned int type)
Definition: vux.c:108
void VuxApplyRotMatrix(VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out)
Definition: vusw.c:396
void VuxRotTrans(VU_VECTOR *v0, VU_VECTOR *out)
Definition: vusw.c:662
void VuxMakeViewMatrix(VU_MATRIX *out, VU_VECTOR *rot, VU_VECTOR *pos, VU_VECTOR *scale)
Definition: vusw.c:544
void VuxTransMatrixXYZ(VU_MATRIX *m, float x, float y, float z)
Definition: vusw.c:202
int VuxPersClip3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
Definition: vusw.c:783
void VuxTransMatrix(VU_MATRIX *m, VU_VECTOR *v0)
Definition: vusw.c:188
void VuxPers3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
Definition: vusw.c:724
void VuxResetMatrix(VU_MATRIX *m)
Definition: vusw.c:39
VU_MATRIX VuViewMatrix
Definition: vux.c:28
void VuxRotMatrixY(VU_MATRIX *m, float y)
Definition: vusw.c:101
void Vu0ScaleMatrix(VU_MATRIX *m, VU_VECTOR *s)
Definition: vuhw.c:93
void VuxMakeProjectionMatrix(VU_MATRIX *proj, float near_plane_w, float near_plane_h, float near_plane_z, float far_plane_z)
Definition: vusw.c:612
void VuxVectorNormal(VU_VECTOR *v)
Definition: vusw.c:447
void VuSetAmbientLight(float r, float g, float b)
Definition: vux.c:154
void Vu0ResetMatrix(VU_MATRIX *m)
Definition: vuhw.c:18
void VuxRotTransPersN(VU_VECTOR *verts, VU_SXYZ *sxyz, unsigned int num_verts)
Definition: vusw.c:858
void Vu0ApplyMatrix(VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out)
Definition: vuhw.c:218
void VuxMulMatrix(VU_MATRIX *m0, VU_MATRIX *m1, VU_MATRIX *out)
Definition: vusw.c:251
void Vu0ScaleMatrixXYZ(VU_MATRIX *m, float x, float y, float z)
Definition: vuhw.c:136
void VuxVectorNormal0(VU_VECTOR *in, VU_VECTOR *out)
Definition: vusw.c:460
void VuxInverseMatrix(VU_MATRIX *in, VU_MATRIX *mat)
Definition: vusw.c:273
void VuxUpdateLocalScreenMatrix(void)
Definition: vusw.c:634
VU_MATRIX VuPrjectionMatrix
Definition: vux.c:35
float VuxDotProduct(VU_VECTOR *v0, VU_VECTOR *v1)
Definition: vusw.c:409
void VuxMakeLocalScreenMatrix2(VU_MATRIX *out, VU_MATRIX *world, VU_MATRIX *view, VU_MATRIX *projection)
Definition: vusw.c:524
void VuxApplyMatrixLS(VU_VECTOR *v0, VU_VECTOR *out)
Definition: vusw.c:484
void VuxMakeLocalScreenMatrix(VU_MATRIX *out, VU_MATRIX *world, VU_MATRIX *view)
Definition: vusw.c:511
int VuxClipSxyz(VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
Definition: vusw.c:894
void VuxCopyMatrix(VU_MATRIX *dest, VU_MATRIX *src)
Definition: vusw.c:366
void VuSetLocalScreenMatrix(VU_MATRIX *m)
Definition: vux.c:135
int VuxRotTransPersClip3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
Definition: vusw.c:875
void Vu0ApplyRotMatrix(VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out)
Definition: vuhw.c:256
void VuxApplyRotMatrixLS(VU_VECTOR *v0, VU_VECTOR *out)
Definition: vusw.c:496
void VuxRotTrans3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_VECTOR *tv0, VU_VECTOR *tv1, VU_VECTOR *tv2)
Definition: vusw.c:671
void VuxRotTransN(VU_VECTOR *verts, VU_VECTOR *tverts, unsigned int num_verts)
Definition: vusw.c:684
void VuInit(void)
Definition: vux.c:70
float Vu0DotProduct(VU_VECTOR *v0, VU_VECTOR *v1)
Definition: vuhw.c:321
s32 s
Definition: ps2ipc.c:30
unsigned char g
Definition: libvux.h:79
unsigned char r
Definition: libvux.h:78
unsigned char a
Definition: libvux.h:81
unsigned char b
Definition: libvux.h:80
float q
Definition: libvux.h:82
float a
Definition: libvux.h:92
float g
Definition: libvux.h:90
float b
Definition: libvux.h:91
float r
Definition: libvux.h:89
VU_FCVECTOR color
Definition: libvux.h:99
VU_VECTOR direction
Definition: libvux.h:98
unsigned short y
Definition: libvux.h:69
unsigned int z
Definition: libvux.h:70
unsigned char f
Definition: libvux.h:71
unsigned short x
Definition: libvux.h:67
Definition: libvux.h:54
unsigned int z
Definition: libvux.h:59
unsigned short y
Definition: libvux.h:58
unsigned short x
Definition: libvux.h:56
float w
Definition: libvux.h:48
float x
Definition: libvux.h:45
float z
Definition: libvux.h:47
float y
Definition: libvux.h:46
int light_type[4]
Definition: teapot.c:59