ps2sdk  1.1
A collection of Open Source libraries used for developing applications on Sony's PlayStation 2® (PS2).
main.c File Reference
#include <kernel.h>
#include <libgs.h>
+ Include dependency graph for main.c:

Go to the source code of this file.

Data Structures

struct  MAVING_SPRITE
 

Macros

#define MAX_SPRITES   1000
 
#define SCREEN_WIDTH   640
 
#define SCREEN_HEIGHT   448
 
#define GIF_PACKET_MAX   10
 

Functions

static int InitGraphics (void)
 
static int InitSprites (void)
 
static int MoveSprites (void)
 
static int DrawSprites (GS_PACKET_TABLE *table)
 
int main (int argc, char *argv[])
 

Variables

static const char x_randspeeds [10] = {1,4,6,5,2,3,8,6,6,7}
 
static const GS_RGBAQ randcolor [10]
 
static short int ScreenOffsetX
 
static short int ScreenOffsetY
 
static GS_DRAWENV draw_env
 
static GS_DISPENV disp_env
 
static GS_GIF_PACKET packets [GIF_PACKET_MAX]
 
static GS_PACKET_TABLE giftable
 
static MAVING_SPRITE sprites [MAX_SPRITES]
 

Macro Definition Documentation

◆ GIF_PACKET_MAX

#define GIF_PACKET_MAX   10

Definition at line 50 of file main.c.

◆ MAX_SPRITES

#define MAX_SPRITES   1000

Definition at line 43 of file main.c.

◆ SCREEN_HEIGHT

#define SCREEN_HEIGHT   448

Definition at line 46 of file main.c.

◆ SCREEN_WIDTH

#define SCREEN_WIDTH   640

Definition at line 45 of file main.c.

Function Documentation

◆ DrawSprites()

static int DrawSprites ( GS_PACKET_TABLE table)
static

Definition at line 213 of file main.c.

214 {
215  int i;
216  QWORD *p;
217 
218  for(i=0;i<MAX_SPRITES;i++)
219  {
220  //Use the uncached segment, to avoid needing to flush the data cache.
221  p = (QWORD*)UNCACHED_SEG(GsGifPacketsAlloc(table, 5)); //Allocate 5 qword for 1 untextured strite
222 
223  /* For this GIF packet, the EOP flag is set to 1.
224  Rightfully, it should only be set for only the final packet so that the GIF knows when it can safely switch paths,
225  but to keep things simple, it's set to 1 for every packet.
226 
227  The packets are all in the PACKED format. */
228  gs_setGIF_TAG(((GS_GIF_TAG *)&p[0]), 4,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
229  gs_setR_PRIM(((GS_R_PRIM *)&p[1]), GS_PRIM_SPRITE,0, 0, 0, 1, 0, 0, 0, 0);
230  gs_setR_RGBAQ(((GS_R_RGBAQ *)&p[2]), sprites[i].color.r, sprites[i].color.g, sprites[i].color.b, sprites[i].color.a, sprites[i].color.q);
231  gs_setR_XYZ2(((GS_R_XYZ *)&p[3]), (ScreenOffsetX+sprites[i].x_pos)<<4, (ScreenOffsetY+sprites[i].y_pos)<<4, 0x00000000);
232  gs_setR_XYZ2(((GS_R_XYZ *)&p[4]), (ScreenOffsetX+sprites[i].x_pos+10)<<4, (ScreenOffsetY+sprites[i].y_pos+10)<<4, 0x00000000);
233  }
234 
235  return 0;
236 
237 }
#define UNCACHED_SEG(x)
Definition: kernel.h:35
static short int ScreenOffsetY
Definition: main.c:48
static short int ScreenOffsetX
Definition: main.c:48
static MAVING_SPRITE sprites[MAX_SPRITES]
Definition: main.c:126
#define MAX_SPRITES
Definition: main.c:43
QWORD * GsGifPacketsAlloc(GS_PACKET_TABLE *table, u32 num_qwords)
Definition: packets.c:20
#define gs_setR_RGBAQ(p, _r, _g, _b, _a, _q)
Definition: libgs.h:1631
#define gs_setR_XYZ2(p, _x, _y, _z)
Definition: libgs.h:1651
#define gs_setGIF_TAG(p, _nloop, _eop, _pre, _prim, _flg, _nreg, _reg)
Definition: libgs.h:1870
#define gif_rd_ad
Definition: libgs.h:326
@ GS_GIF_PACKED
Definition: libgs.h:181
#define gs_setR_PRIM(p, _prim_type, _iip, _tme, _fge, _abe, _aa1, _fst, _ctxt, _fix)
Definition: libgs.h:1627
@ GS_PRIM_SPRITE
Definition: libgs.h:73
u8 a
Definition: libgs.h:598
u8 b
Definition: libgs.h:597
u8 g
Definition: libgs.h:596
float q
Definition: libgs.h:599
GS_RGBAQ color
Definition: main.c:25
Definition: libgs.h:333

References GS_RGBAQ::a, GS_RGBAQ::b, MAVING_SPRITE::color, GS_RGBAQ::g, gif_rd_ad, GS_GIF_PACKED, GS_PRIM_SPRITE, gs_setGIF_TAG, gs_setR_PRIM, gs_setR_RGBAQ, gs_setR_XYZ2, GsGifPacketsAlloc(), MAX_SPRITES, GS_RGBAQ::q, ScreenOffsetX, ScreenOffsetY, sprites, and UNCACHED_SEG.

Referenced by main().

◆ InitGraphics()

int InitGraphics ( void  )
static

Definition at line 88 of file main.c.

89 {
90  unsigned int FrameBufferVRAMAddress;
91 
93 
96  //Retrieve screen offset parameters.
99  GsSetDefaultDrawEnvAddress(&draw_env, FrameBufferVRAMAddress);
100 
102  GsSetDefaultDisplayEnvAddress(&disp_env, FrameBufferVRAMAddress);
103 
104  //execute draw/display environment(s) (context 1)
107 
108  //Set common primitive-drawing settings (Refer to documentation on PRMODE and PRMODECONT registers).
109  GsOverridePrimAttributes(GS_DISABLE, 0, 0, 0, 0, 0, 0, 0, 0);
110 
111  //Set transparency settings for context 1 (Refer to documentation on TEST and TEXA registers).
112  //Alpha test = enabled, pass if >= alpha reference, alpha reference = 1, fail method = no update
114  //Enable global alpha blending
116 
117  //set transparency settings for context 2 (Refer to documentation on TEST and TEXA registers).
118  //Alpha test = enabled, pass if >= alpha reference, alpha reference = 1, fail method = no update
120  //Enable global alpha blending
122 
123  return 0;
124 }
static GS_DRAWENV draw_env
Definition: main.c:52
#define SCREEN_WIDTH
Definition: main.c:45
#define SCREEN_HEIGHT
Definition: main.c:46
static GS_DISPENV disp_env
Definition: main.c:53
void GsSetDefaultDrawEnvAddress(GS_DRAWENV *drawenv, u16 vram_addr)
Definition: draw.c:47
#define GS_ENABLE
Definition: libgs.h:63
@ GS_ALPHA_NO_UPDATE
Definition: libgs.h:119
void GsPutDisplayEnv1(GS_DISPENV *dispenv)
Definition: draw.c:201
void GsEnableAlphaTransparency2(u16 enable, u16 method, u8 alpha_ref, u16 fail_method)
Definition: primitives.c:94
@ GS_MODE_NTSC
Definition: libgs.h:56
void GsEnableAlphaBlending2(u16 enable)
Definition: primitives.c:160
void GsEnableAlphaTransparency1(u16 enable, u16 method, u8 alpha_ref, u16 fail_method)
Definition: primitives.c:72
void GsSetDefaultDisplayEnvAddress(GS_DISPENV *dispenv, u16 vram_addr)
Definition: draw.c:164
#define GS_DISABLE
Definition: libgs.h:62
void GsSetDefaultDisplayEnv(GS_DISPENV *dispenv, u16 psm, u16 w, u16 h, u16 dx, u16 dy)
Definition: draw.c:74
void GsOverridePrimAttributes(s8 override, s8 iip, s8 tme, s8 fge, s8 abe, s8 aa1, s8 fst, s8 ctxt, s8 fix)
Definition: primitives.c:23
#define GS_PIXMODE_32
Definition: libgs.h:77
#define GS_FFMD_FIELD
Definition: libgs.h:41
void GsSetDefaultDrawEnv(GS_DRAWENV *drawenv, u16 psm, u16 w, u16 h)
Definition: draw.c:23
void GsEnableAlphaBlending1(u16 enable)
Definition: primitives.c:137
@ GS_ALPHA_GEQUAL
Definition: libgs.h:111
int GsVramAllocFrameBuffer(s16 w, s16 h, s16 psm)
Definition: texture.c:105
void GsPutDrawEnv1(GS_DRAWENV *drawenv)
Definition: draw.c:169
#define GS_INTERLACED
Definition: libgs.h:38
void GsResetGraph(short int mode, short int interlace, short int omode, short int ffmode)
#define GS_INIT_RESET
Definition: libgs.h:33
u16 offset_y
Definition: libgs.h:1944
u16 offset_x
Definition: libgs.h:1942

References disp_env, draw_env, GS_ALPHA_GEQUAL, GS_ALPHA_NO_UPDATE, GS_DISABLE, GS_ENABLE, GS_FFMD_FIELD, GS_INIT_RESET, GS_INTERLACED, GS_MODE_NTSC, GS_PIXMODE_32, GsEnableAlphaBlending1(), GsEnableAlphaBlending2(), GsEnableAlphaTransparency1(), GsEnableAlphaTransparency2(), GsOverridePrimAttributes(), GsPutDisplayEnv1(), GsPutDrawEnv1(), GsResetGraph(), GsSetDefaultDisplayEnv(), GsSetDefaultDisplayEnvAddress(), GsSetDefaultDrawEnv(), GsSetDefaultDrawEnvAddress(), GsVramAllocFrameBuffer(), GS_DRAWENV::offset_x, GS_DRAWENV::offset_y, SCREEN_HEIGHT, SCREEN_WIDTH, ScreenOffsetX, and ScreenOffsetY.

Referenced by main().

◆ InitSprites()

static int InitSprites ( void  )
static

Definition at line 128 of file main.c.

129 {
130  int i,j;
131 
132  for(i=0,j=0;i<MAX_SPRITES;i++,j++)
133  {
134  if(j>9)j=0;
135 
136  sprites[i].x_pos =i;
137  sprites[i].y_pos =i/2;
138 
139  sprites[i].x_dir =0;
140  sprites[i].y_dir =0;
141 
142  sprites[i].x_speed =i/x_randspeeds[j];
143  sprites[i].y_speed =x_randspeeds[j]+1;
144 
145  if(sprites[i].x_speed<=0)sprites[i].x_speed=2;
146  if(sprites[i].y_speed<=0)sprites[i].y_speed=1;
147 
148 
149  //set color
150  sprites[i].color = randcolor[j];
151  }
152 
153  return 0;
154 }
static const char x_randspeeds[10]
Definition: main.c:28
static const GS_RGBAQ randcolor[10]
Definition: main.c:30
char y_dir
Definition: main.c:20
int x_pos
Definition: main.c:16
char x_dir
Definition: main.c:19
char x_speed
Definition: main.c:22
int y_pos
Definition: main.c:17
char y_speed
Definition: main.c:23

References MAVING_SPRITE::color, MAX_SPRITES, randcolor, sprites, MAVING_SPRITE::x_dir, MAVING_SPRITE::x_pos, x_randspeeds, MAVING_SPRITE::x_speed, MAVING_SPRITE::y_dir, MAVING_SPRITE::y_pos, and MAVING_SPRITE::y_speed.

Referenced by main().

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 63 of file main.c.

64 {
65  InitGraphics();
66 
69 
70  InitSprites();
71 
72  while(1)
73  {
74  GsGifPacketsClear(&giftable); // clear the area that we are going to put the sprites/triangles/....
75 
76  MoveSprites();
77  DrawSprites(&giftable); //add stuff to the packet area
78 
79  GsDrawSync(0);
80  GsVSync(0);
81  GsClearDrawEnv1(&draw_env); // clear the draw environment before we draw stuff on it
82  GsGifPacketsExecute(&giftable, 1); // set to '1' becuse we want to wait for drawing to finish. if we dont wait we will write on packets that is currently writing to the gif
83  }
84 
85  return 0;
86 }
static int MoveSprites(void)
Definition: main.c:156
#define GIF_PACKET_MAX
Definition: main.c:50
static int InitGraphics(void)
Definition: main.c:88
static GS_PACKET_TABLE giftable
Definition: main.c:56
static int InitSprites(void)
Definition: main.c:128
static int DrawSprites(GS_PACKET_TABLE *table)
Definition: main.c:213
static GS_GIF_PACKET packets[GIF_PACKET_MAX]
Definition: main.c:55
void GsDrawSync(int mode)
Definition: sync.c:18
void GsVSync(int mode)
Definition: sync.c:50
int GsGifPacketsExecute(GS_PACKET_TABLE *table, u16 wait)
Definition: packets.c:76
void GsGifPacketsClear(GS_PACKET_TABLE *table)
Definition: packets.c:70
void GsClearDrawEnv1(GS_DRAWENV *drawenv)
Definition: draw.c:182
u32 packet_count
Definition: libgs.h:2289
GS_GIF_PACKET * packets
Definition: libgs.h:2292

References draw_env, DrawSprites(), GIF_PACKET_MAX, giftable, GsClearDrawEnv1(), GsDrawSync(), GsGifPacketsClear(), GsGifPacketsExecute(), GsVSync(), InitGraphics(), InitSprites(), MoveSprites(), GS_PACKET_TABLE::packet_count, GS_PACKET_TABLE::packets, and packets.

◆ MoveSprites()

static int MoveSprites ( void  )
static

Definition at line 156 of file main.c.

157 {
158  int i;
159 
160  for(i=0;i<MAX_SPRITES;i++)
161  {
162  // mod a little
163  // sprites[i].x_speed++;
164  // sprites[i].y_speed++;
165 
166  if(sprites[i].x_speed>10)sprites[i].x_speed =sprites[i].x_speed-10;
167  if(sprites[i].y_speed>10)sprites[i].y_speed =sprites[i].y_speed-10;
168 
169  //x
170  if(sprites[i].x_dir==0)
171  {
172  sprites[i].x_pos -= sprites[i].x_speed;
173  if(sprites[i].x_pos<0)
174  {
175  sprites[i].x_pos=0;
176  sprites[i].x_dir=1;
177  }
178  }
179  else if(sprites[i].x_dir==1)
180  {
181  sprites[i].x_pos += sprites[i].x_speed;
182  if(sprites[i].x_pos>SCREEN_WIDTH)
183  {
185  sprites[i].x_dir=0;
186  }
187  }
188 
189  //y
190  if(sprites[i].y_dir==0)
191  {
192  sprites[i].y_pos -= sprites[i].y_speed;
193  if(sprites[i].y_pos<0)
194  {
195  sprites[i].y_pos=0;
196  sprites[i].y_dir=1;
197  }
198  }
199  else if(sprites[i].y_dir==1)
200  {
201  sprites[i].y_pos += sprites[i].y_speed;
202  if(sprites[i].y_pos>SCREEN_HEIGHT)
203  {
205  sprites[i].y_dir=0;
206  }
207  }
208  }
209 
210  return 0;
211 }

References MAX_SPRITES, SCREEN_HEIGHT, SCREEN_WIDTH, sprites, MAVING_SPRITE::x_dir, MAVING_SPRITE::x_pos, MAVING_SPRITE::x_speed, MAVING_SPRITE::y_dir, MAVING_SPRITE::y_pos, and MAVING_SPRITE::y_speed.

Referenced by main().

Variable Documentation

◆ disp_env

GS_DISPENV disp_env
static

Definition at line 53 of file main.c.

Referenced by InitGraphics().

◆ draw_env

GS_DRAWENV draw_env
static

Definition at line 52 of file main.c.

Referenced by InitGraphics(), and main().

◆ giftable

GS_PACKET_TABLE giftable
static

Definition at line 56 of file main.c.

Referenced by main().

◆ packets

GS_GIF_PACKET packets[GIF_PACKET_MAX]
static

Definition at line 55 of file main.c.

Referenced by main().

◆ randcolor

const GS_RGBAQ randcolor[10]
static
Initial value:
={ {28 ,200,200,0x80,0.0f},
{255, 0,128,0x80,0.0f},
{255,128,0,0x80,0.0f},
{255,255,255,0x80,0.0f},
{0 ,128,255,0x80,0.0f},
{255,255,128,0x80,0.0f},
{128,128,255,0x80,0.0f},
{226,137,245,0x80,0.0f},
{172,177,210,0x80,0.0f},
{221,180,162,0x80,0.0f}
}

Definition at line 30 of file main.c.

Referenced by InitSprites().

◆ ScreenOffsetX

short int ScreenOffsetX
static

Definition at line 48 of file main.c.

Referenced by DrawSprites(), and InitGraphics().

◆ ScreenOffsetY

short int ScreenOffsetY
static

Definition at line 48 of file main.c.

Referenced by DrawSprites(), and InitGraphics().

◆ sprites

MAVING_SPRITE sprites[MAX_SPRITES]
static

Definition at line 126 of file main.c.

Referenced by DrawSprites(), InitSprites(), and MoveSprites().

◆ x_randspeeds

const char x_randspeeds[10] = {1,4,6,5,2,3,8,6,6,7}
static

Definition at line 28 of file main.c.

Referenced by InitSprites().