00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <pspkernel.h>
00027 #include <pspdisplay.h>
00028 #include <pspdebug.h>
00029 #include <stdlib.h>
00030 #include <stdio.h>
00031 #include <stdarg.h>
00032 #include <math.h>
00033 #include <ctype.h>
00034 #include <string.h>
00035 #include <pspctrl.h>
00036 #include <pspgu.h>
00037 #include <psprtc.h>
00038 #include <psppower.h>
00039 #include <malloc.h>
00040 #include <png.h>
00041 #include <pspaudio.h>
00042 #include <pspatrac3.h>
00043 #include <pspvfpu.h>
00044 #include <jpeglib.h>
00045
00046 #if defined(__cplusplus)
00047 extern "C" {
00048 #endif
00049
00050
00051
00052
00053
00054 extern SceCtrlData ctrl;
00055
00056
00057
00058 typedef struct {
00059 u32 color;
00060 short x, y, z;
00061 }
00062 CP_Vertex_2D;
00063
00064 typedef struct {
00065 short u, v;
00066 short x, y, z;
00067 }
00068 TP_Vertex_2D;
00069
00070 typedef struct {
00071 u32 color;
00072 float x, y, z;
00073 }
00074 CP_Vertex_3D;
00075
00076 typedef struct {
00077 float nx, ny, nz;
00078 u32 color;
00079 float x, y, z;
00080 }
00081 NCP_Vertex_3D;
00082
00083 typedef struct {
00084 float u, v;
00085 float x, y, z;
00086 }
00087 TP_Vertex_3D;
00088
00089 typedef struct {
00090 float nx, ny, nz;
00091 float u, v;
00092 float x, y, z;
00093 }
00094 NTP_Vertex_3D;
00095
00096
00097 typedef struct {
00098
00099 float x, y, width, height;
00100 float startX, startY, endX, endY;
00101 float angle, centerX, centerY;
00102
00103
00104
00105 int initWidth, initHeight;
00106 int realWidth, realHeight;
00107 int totalSize;
00108 short location;
00109 u32* data;
00110 }
00111 Image;
00112
00113
00114 typedef struct {
00115 float posX, posY, posZ;
00116 float sizeX, sizeY, sizeZ;
00117 float rotX, rotY, rotZ;
00118 int vertTotal;
00119 u32 __attribute__ ( ( aligned ( 16 ) ) ) *displayList;
00120 TP_Vertex_3D *verts;
00121 Image *img;
00122 }
00123 Model;
00124
00125
00126 typedef struct {}
00127 Audio;
00128
00129
00130 typedef struct {}
00131 Font;
00132
00133 typedef struct {
00134 union {
00135 struct {
00136 int select:
00137 1, start:
00138 3;
00139 int up:
00140 1, right:
00141 1, down:
00142 1, left:
00143 1;
00144 int L:
00145 1, R:
00146 1;
00147 int triangle:
00148 3, circle:
00149 1, cross:
00150 1, square:
00151 1;
00152 int home:
00153 1, hold:
00154 1, wlanOn:
00155 1, remote:
00156 1, volUp:
00157 1;
00158 int volDown:
00159 1, screen:
00160 1, note:
00161 1, disc:
00162 1, ms:
00163 1;
00164 };
00165 int value;
00166 } pressed;
00167
00168 union {
00169 struct {
00170 int select:
00171 1, start:
00172 3;
00173 int up:
00174 1, right:
00175 1, down:
00176 1, left:
00177 1;
00178 int L:
00179 1, R:
00180 1;
00181 int triangle:
00182 3, circle:
00183 1, cross:
00184 1, square:
00185 1;
00186 int home:
00187 1, hold:
00188 1, wlanOn:
00189 1, remote:
00190 1, volUp:
00191 1;
00192 int volDown:
00193 1, screen:
00194 1, note:
00195 1, disc:
00196 1, ms:
00197 1;
00198 };
00199 int value;
00200 } held;
00201
00202 union {
00203 struct {
00204 int select:
00205 1, start:
00206 3;
00207 int up:
00208 1, right:
00209 1, down:
00210 1, left:
00211 1;
00212 int L:
00213 1, R:
00214 1;
00215 int triangle:
00216 3, circle:
00217 1, cross:
00218 1, square:
00219 1;
00220 int home:
00221 1, hold:
00222 1, wlanOn:
00223 1, remote:
00224 1, volUp:
00225 1;
00226 int volDown:
00227 1, screen:
00228 1, note:
00229 1, disc:
00230 1, ms:
00231 1;
00232 };
00233 int value;
00234 } released;
00235
00236 int repeatMask;
00237 int repeatCounter;
00238 int repeatInit;
00239 int repeatInterval;
00240
00241 short analogX;
00242 short analogY;
00243 }
00244 CONTROLLER;
00245
00246 extern CONTROLLER *button;
00247
00248 extern u32* fbp0;
00249 extern u32* fbp1;
00250 extern u16* zbp;
00251 extern unsigned int __attribute__ ( ( aligned ( 16 ) ) ) DList[262144];
00252
00253 extern int curFps, lastFps;
00254
00255 extern u32 tickResolution;
00256 extern u64 fpsTickNow;
00257 extern u64 fpsTickLast;
00258
00259 extern CONTROLLER buttonInit;
00260 extern SceCtrlData ctrl;
00261
00262 extern float deltaTime;
00263
00264 extern const int PRINT_BUFF;
00265
00266 extern const int IN_RAM;
00267 extern const int IN_VRAM;
00268
00269 extern const int OFF;
00270 extern const int ON;
00271
00272 extern const int POINTS;
00273 extern const int LINES;
00274 extern const int LINE_STRIP;
00275 extern const int TRIANGLES;
00276 extern const int TRIANGLE_STRIP;
00277 extern const int TRIANGLE_FAN;
00278 extern const int SPRITES;
00279
00280 extern const float PI;
00281 extern const float PI_180;
00282 extern short drawingStarted;
00283
00284 extern ScePspFMatrix4 m_ortho, m_projection, m_projection_view, m_projection_model, m_ortho_view, m_ortho_model;
00285
00286 #define RGB(r,g,b) ((r) | ((g)<<8) | ((b)<<16) | (0xff<<24))
00287 #define RGBA(r,g,b,a) ((r) | ((g)<<8) | ((b)<<16) | ((a)<<24))
00288
00289 #define IsSet(val,flag) (val&flag)==flag
00290
00291 #define MASK_NONE 0x0
00292 #define MASK_SELECT 0x000001
00293 #define MASK_START 0x000008
00294 #define MASK_UP 0x000010
00295 #define MASK_RIGHT 0x000020
00296 #define MASK_DOWN 0x000040
00297 #define MASK_LEFT 0x000080
00298 #define MASK_LTRIG 0x000100
00299 #define MASK_RTRIG 0x000200
00300 #define MASK_TRIANGLE 0x001000
00301 #define MASK_CIRCLE 0x002000
00302 #define MASK_CROSS 0x004000
00303 #define MASK_SQUARE 0x008000
00304 #define MASK_HOME 0x010000
00305 #define MASK_HOLD 0x020000
00306 #define MASK_NOTE 0x800000
00307 #define MASK_SCREEN 0x400000
00308 #define MASK_VOLUP 0x100000
00309 #define MASK_VOLDOWN 0x200000
00310 #define MASK_WLANON 0x040000
00311 #define MASK_REMOTE 0x080000
00312 #define MASK_DISC 0x1000000
00313 #define MASK_MS 0x2000000
00314 #define MASK_ALL MASK_SELECT|MASK_START|MASK_UP|MASK_RIGHT|MASK_DOWN|MASK_LEFT|MASK_LTRIG|MASK_RTRIG|MASK_TRIANGLE|MASK_CIRCLE|MASK_CROSS|MASK_SQUARE
00315
00316
00317
00318
00319
00320 void* vrelptr ( void *ptr );
00321 void* vabsptr ( void *ptr );
00322
00323 void* valloc ( size_t size );
00324 void vfree ( void* ptr );
00325 size_t vmemavail();
00326 size_t vlargestblock();
00327
00328 #ifdef _DEBUG
00329
00330 void __memwalk();
00331 #endif
00332
00333
00334
00335
00336
00337
00340
00369 void start_vLib ( void );
00370
00399 void stop_vLib ( void );
00400
00429 void start_drawing ( void );
00430
00460 void end_drawing ( void );
00461
00465 void sync_frame ( void );
00466
00470 void flip_screen ( void );
00471
00475 void wait_to_vsync ( void );
00476
00482 void clear_screen ( void );
00483
00494 void set_clear_color ( u32 color );
00495
00500 void update_delta_time ( void );
00501
00504
00505
00506
00507
00510
00523 void draw_pixel ( float x, float y, u32 color );
00524
00539 void draw_line ( float startX, float startY, float endX, float endY, u32 color );
00540
00556 void draw_grad_line ( float startX, float startY, float endX, float endY, u32 color1, u32 color2 );
00557
00572 void draw_rect ( float x, float y, float width, float height, u32 color );
00573
00591 void draw_grad_rect ( float x, float y, float width, float height, u32 color1, u32 color2, u32 color3, u32 color4 );
00592
00607 void draw_fill_rect ( float x, float y, float width, float height, u32 color );
00608
00626 void draw_fill_grad_rect ( float x, float y, float width, float height, u32 color1, u32 color2, u32 color3, u32 color4 );
00627
00630
00631
00632
00633
00636
00660 Image *load_image ( const char *filename, int location );
00661
00672 void unload_image ( Image *img );
00673
00701 void draw_image ( Image *img );
00702
00722 void set_linear_filter ( short state );
00723
00724
00725
00726
00729
00730
00731
00732
00735
00736 Model *load_model ( const char *filename );
00737 void unload_model ( Model *mdl );
00738
00739 void draw_model ( Model *mdl, Image *img );
00740
00741 void set_fog ( float near, float far, unsigned int color );
00742 void disable_fog ( void );
00743
00746
00747
00748
00749
00752
00753 void set_camera_3rd_person ( float posX, float posY, float posZ, float rotX, float rotY, float zoom );
00754
00757
00758
00759
00760
00763
00764 Audio *load_audio ( const char *filename );
00765 void play_audio ( Audio *aud, int stream );
00766
00769
00770
00771
00772
00775
00776 Font *load_font ( const char *filename );
00777 void print ( Font *fnt, char *format );
00778
00781
00782
00783
00784
00787
00863 CONTROLLER *read_input ( int masked, int init, int interval );
00864
00867
00868
00869
00870
00873
00874
00875 float vfpu_sinf ( float rad );
00876 float vfpu_cosf ( float rad );
00877 float vfpu_sqrtf ( float x );
00878
00879
00880 void vfpu_identity_m ( ScePspFMatrix4 *m );
00881 void vfpu_translate_m ( ScePspFMatrix4 *m, float x, float y, float z );
00882 void vfpu_rotateX_m ( ScePspFMatrix4 *m, float x );
00883 void vfpu_rotateY_m ( ScePspFMatrix4 *m, float y );
00884 void vfpu_rotateZ_m ( ScePspFMatrix4 *m, float z );
00885 void vfpu_rotateXYZ_m ( ScePspFMatrix4 *m, float x, float y, float z );
00886 void vfpu_rotateZYX_m ( ScePspFMatrix4 *m, float z, float y, float x );
00887 void vfpu_scale_m ( ScePspFMatrix4 *m, float x, float y, float z );
00888 void vfpu_lookAt_m ( ScePspFMatrix4 *m, ScePspFVector3* eye, ScePspFVector3* center, ScePspFVector3* up );
00889 void vfpu_perspective_m ( ScePspFMatrix4 *m, float fovy, float aspect, float near, float far );
00890 void vfpu_ortho_m ( ScePspFMatrix4 *m, float left, float right, float bottom, float top, float near, float far );
00891
00894
00895
00896
00897
00900
00901
00902 void fps ( void );
00903 void fpsX ( const char *format, ... );
00904 void sysmon ( void );
00905 void sysmonX ( const char *format, ... );
00906
00909
00910 void start_ticker ( void );
00911 int end_ticker ( void );
00912
00913 #if defined(__cplusplus)
00914 }
00915 #endif