Beispiel #1
0
int DrawSprites(GS_PACKET_TABLE *table)
{
	int i;

	QWORD	*p;


	


	for(i=0;i<MAX_SPRITES;i++)
	{
		
		p = GsGifPacketsAlloc(table, 5); //alloc 5 qword for 1 untextured strite


		gs_setGIF_TAG(((GS_GIF_TAG	*)&p[0]), 4,1,0,0,0,0,1,0x0e);
		gs_setR_PRIM(((GS_R_PRIM	*)&p[1]), GS_PRIM_SPRITE,0, 0, 0, 1, 0, 0, 0, 0);
		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);
		gs_setR_XYZ2(((GS_R_XYZ		*)&p[3]), (SCREEN_OFFSET_X+sprites[i].x_pos)<<4,		(SCREEN_OFFSET_Y+sprites[i].y_pos)<<4, 0x00000000);
		gs_setR_XYZ2(((GS_R_XYZ		*)&p[4]), (SCREEN_OFFSET_X+sprites[i].x_pos+10)<<4,	(SCREEN_OFFSET_Y+sprites[i].y_pos+10)<<4, 0x00000000);

	}

	return 0;

}
Beispiel #2
0
static int DrawSprites(GS_PACKET_TABLE *table)
{
	int i;
	QWORD *p;

	for(i=0;i<MAX_SPRITES;i++)
	{
		//Use the uncached segment, to avoid needing to flush the data cache.
		p = (QWORD*)UNCACHED_SEG(GsGifPacketsAlloc(table, 5)); //Allocate 5 qword for 1 untextured strite

		/*	For this GIF packet, the EOP flag is set to 1.
			Rightfully, it should only be set for only the final packet so that the GIF knows when it can safely switch paths,
			but to keep things simple, it's set to 1 for every packet.

			The packets are all in the PACKED format.	*/
		gs_setGIF_TAG(((GS_GIF_TAG	*)&p[0]), 4,1,0,0,GS_GIF_PACKED,1,gif_rd_ad);
		gs_setR_PRIM(((GS_R_PRIM	*)&p[1]), GS_PRIM_SPRITE,0, 0, 0, 1, 0, 0, 0, 0);
		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);
		gs_setR_XYZ2(((GS_R_XYZ		*)&p[3]), (ScreenOffsetX+sprites[i].x_pos)<<4,	(ScreenOffsetY+sprites[i].y_pos)<<4, 0x00000000);
		gs_setR_XYZ2(((GS_R_XYZ		*)&p[4]), (ScreenOffsetX+sprites[i].x_pos+10)<<4,	(ScreenOffsetY+sprites[i].y_pos+10)<<4, 0x00000000);
	}

	return 0;

}
Beispiel #3
0
static int DrawSprites(GS_PACKET_TABLE *table)
{
	int i;
	QWORD *p;

	for(i=0;i<MAX_SPRITES;i++)
	{
		//Use the uncached segment, to avoid needing to flush the data cache.
		p = (QWORD*)UNCACHED_SEG(GsGifPacketsAlloc(table, 5)); //Allocate 5 qword for 1 untextured strite

		gs_setGIF_TAG(((GS_GIF_TAG	*)&p[0]), 4,1,0,0,0,0,1,0x0e);
		gs_setR_PRIM(((GS_R_PRIM	*)&p[1]), GS_PRIM_SPRITE,0, 0, 0, 1, 0, 0, 0, 0);
		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);
		gs_setR_XYZ2(((GS_R_XYZ		*)&p[3]), (ScreenOffsetX+sprites[i].x_pos)<<4,	(ScreenOffsetY+sprites[i].y_pos)<<4, 0x00000000);
		gs_setR_XYZ2(((GS_R_XYZ		*)&p[4]), (ScreenOffsetX+sprites[i].x_pos+10)<<4,	(ScreenOffsetY+sprites[i].y_pos+10)<<4, 0x00000000);
	}

	return 0;

}
Beispiel #4
0
int DrawTriangles(GS_PACKET_TABLE *table, int context_index)
{

	QWORD	*p;


	
	// top left
		
	p = GsGifPacketsAlloc(table, 6); 


	gs_setGIF_TAG(((GS_GIF_TAG	*)&p[0]), 5,1,0,0,0,0,1,0x0e);
	gs_setR_PRIM(((GS_R_PRIM	*)&p[1]), GS_PRIM_TRI,0, 0, 0, 1, 0, 0, context_index, 0);
	gs_setR_RGBAQ(((GS_R_RGBAQ	*)&p[2]), 200, 100, 100, 0x80, 0.0f);
	gs_setR_XYZ2(((GS_R_XYZ		*)&p[3]), (SCREEN_OFFSET_X+0)<<4,		(SCREEN_OFFSET_Y+0)<<4, 0x00000000);
	gs_setR_XYZ2(((GS_R_XYZ		*)&p[4]), (SCREEN_OFFSET_X+200)<<4,		(SCREEN_OFFSET_Y+0)<<4, 0x00000000);
	gs_setR_XYZ2(((GS_R_XYZ		*)&p[5]), (SCREEN_OFFSET_X+point_x)<<4,	(SCREEN_OFFSET_Y+point_y)<<4, 0x00000000);




	//top right
	p = GsGifPacketsAlloc(table, 6); 


	gs_setGIF_TAG(((GS_GIF_TAG	*)&p[0]), 5,1,0,0,0,0,1,0x0e);
	gs_setR_PRIM(((GS_R_PRIM	*)&p[1]), GS_PRIM_TRI,0, 0, 0, 1, 0, 0, context_index, 0);
	gs_setR_RGBAQ(((GS_R_RGBAQ	*)&p[2]), 100, 200, 100, 0x80, 0.0f);
	gs_setR_XYZ2(((GS_R_XYZ		*)&p[3]), (SCREEN_OFFSET_X+SCREEN_WIDTH-200)<<4,		(SCREEN_OFFSET_Y+0)<<4, 0x00000000);
	gs_setR_XYZ2(((GS_R_XYZ		*)&p[4]), (SCREEN_OFFSET_X+SCREEN_WIDTH)<<4,		(SCREEN_OFFSET_Y+0)<<4, 0x00000000);
	gs_setR_XYZ2(((GS_R_XYZ		*)&p[5]), (SCREEN_OFFSET_X+point_x)<<4,				(SCREEN_OFFSET_Y+point_y)<<4, 0x00000000);




	//bottom right
	p = GsGifPacketsAlloc(table, 6); 


	gs_setGIF_TAG(((GS_GIF_TAG	*)&p[0]), 5,1,0,0,0,0,1,0x0e);
	gs_setR_PRIM(((GS_R_PRIM	*)&p[1]), GS_PRIM_TRI,0, 0, 0, 1, 0, 0, context_index, 0);
	gs_setR_RGBAQ(((GS_R_RGBAQ	*)&p[2]), 100, 100, 200, 0x80, 0.0f);
	gs_setR_XYZ2(((GS_R_XYZ		*)&p[3]), (SCREEN_OFFSET_X+SCREEN_WIDTH-200)<<4,		(SCREEN_OFFSET_Y+SCREEN_HEIGHT)<<4, 0x00000000);
	gs_setR_XYZ2(((GS_R_XYZ		*)&p[4]), (SCREEN_OFFSET_X+SCREEN_WIDTH)<<4,		(SCREEN_OFFSET_Y+SCREEN_HEIGHT)<<4, 0x00000000);
	gs_setR_XYZ2(((GS_R_XYZ		*)&p[5]), (SCREEN_OFFSET_X+point_x)<<4,				(SCREEN_OFFSET_Y+point_y)<<4, 0x00000000);



	//bottom left
	p = GsGifPacketsAlloc(table, 6); 


	gs_setGIF_TAG(((GS_GIF_TAG	*)&p[0]), 5,1,0,0,0,0,1,0x0e);
	gs_setR_PRIM(((GS_R_PRIM	*)&p[1]), GS_PRIM_TRI,0, 0, 0, 1, 0, 0, context_index, 0);
	gs_setR_RGBAQ(((GS_R_RGBAQ	*)&p[2]), 100, 200, 200, 0x80, 0.0f);
	gs_setR_XYZ2(((GS_R_XYZ		*)&p[3]), (SCREEN_OFFSET_X+0)<<4,		(SCREEN_OFFSET_Y+SCREEN_HEIGHT)<<4, 0x00000000);
	gs_setR_XYZ2(((GS_R_XYZ		*)&p[4]), (SCREEN_OFFSET_X+200)<<4,		(SCREEN_OFFSET_Y+SCREEN_HEIGHT)<<4, 0x00000000);
	gs_setR_XYZ2(((GS_R_XYZ		*)&p[5]), (SCREEN_OFFSET_X+point_x)<<4,	(SCREEN_OFFSET_Y+point_y)<<4, 0x00000000);


	return 0;

}