PS2SDK
PS2 Homebrew Libraries
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 
41 
43 typedef struct
44 {
45  float x;
46  float y;
47  float z;
48  float w;
49 
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 {
98  VU_VECTOR direction;
99  VU_FCVECTOR color;
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(const VU_MATRIX *projection);
125 extern void VuSetProjectionType(unsigned int type);
126 extern void VuSetWorldMatrix(const VU_MATRIX *world);
127 extern void VuSetViewMatrix(const VU_MATRIX *view);
128 extern void VuSetLocalScreenMatrix(const 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);
168 extern VU_VECTOR VuxCrossProduct(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;
205 extern VU_MATRIX VuPrjectionMatrix;
206 extern VU_MATRIX VuLocalScreenMatrix;
207 
208 #ifdef __cplusplus
209 }
210 #endif
211 
212 #endif /* __LIBVUX_H__ */
VU_FLAT_LIGHT
Definition: libvux.h:96
VU_MATRIX
Definition: libvux.h:35
VU_SXYZF
Definition: libvux.h:64
__attribute__
typedef __attribute__
Definition: tlbfunc.c:60
VuxUpdateLocalScreenMatrix
void VuxUpdateLocalScreenMatrix(void)
Definition: vusw.c:634
VU_SXYZ::y
unsigned short y
Definition: libvux.h:58
VU_SXYZ::x
unsigned short x
Definition: libvux.h:56
VU_SXYZ
Definition: libvux.h:53
VU_SXYZF::y
unsigned short y
Definition: libvux.h:69
VU_SXYZF::x
unsigned short x
Definition: libvux.h:67
__attribute__
Definition: gif_registers.h:38
VU_FCVECTOR
Definition: libvux.h:87
VU_CVECTOR
Definition: libvux.h:76
VU_VECTOR
Definition: libvux.h:43