Exemple #1
0
void Draw_Bump(Quad *qd){
	int i;
	pvr_poly_cxt_txr(&p_cxt,PVR_LIST_TR_POLY,qd->mat.bumpmap.fmt,qd->mat.bumpmap.w,qd->mat.bumpmap.w,qd->mat.bumpmap.txt,PVR_FILTER_BILINEAR);
	p_cxt.gen.specular = PVR_SPECULAR_ENABLE;
	pvr_poly_compile(&p_hdr,&p_cxt);
	//p_hdr.cmd |= 4;
	
	/*
		Average out the light source positions
	*/
	static Vector3 D;
	static Vector3 G;
	if(LIGHTS > 1){
		G.x =0;
		G.y = 0;
		G.z = 0;
		for(i = 0; i < LIGHTS;i++){
			G.x += Lights[i].x;
			G.y += Lights[i].y;
			G.z += Lights[i].z;
		}
		G.x /= LIGHTS;
		G.y /= LIGHTS;
		G.z /= LIGHTS;
		D.x = (qd->verts[0].p.x+16) - G.x;
		D.y = (qd->verts[0].p.y+16) - G.y;
		D.z = (qd->verts[0].p.z) - G.z;
	}else{
		D.x = (qd->verts[0].p.x+16) - Lights[0].x;
		D.y = (qd->verts[0].p.y+16) - Lights[0].y;
		D.z = (qd->verts[0].p.z) - Lights[0].z;
	}
	/*
		Calculate Spherical elevation and rotation angles
	*/
	float T = (frsqrt(fipr_magnitude_sqr(D.x,D.y,D.z,0.0)))*PI2;

	float Q = (fast_atan2f(D.y,D.x));
	pvr_prim(&p_hdr,sizeof(pvr_poly_hdr_t));
	/*
		Pack bump paramters, 1.0 is the "bumpiness"
	*/
	Uint32 oargb = pvr_pack_bump(1.0,T,Q);
	qd->verts[0].trans.argb = 0xff000000;
	qd->verts[0].trans.oargb = oargb;
	pvr_prim(&qd->verts[0].trans,sizeof(pvr_vertex_t));
	
	qd->verts[1].trans.oargb = oargb;
	qd->verts[1].trans.argb = 0xff000000;
	pvr_prim(&qd->verts[1].trans,sizeof(pvr_vertex_t));
	
	qd->verts[2].trans.oargb = oargb;
	qd->verts[2].trans.argb = 0xff000000;
	pvr_prim(&qd->verts[2].trans,sizeof(pvr_vertex_t));
	
	qd->verts[3].trans.oargb = oargb;
	qd->verts[3].trans.argb = 0xff000000;
	pvr_prim(&qd->verts[3].trans,sizeof(pvr_vertex_t));

}
Exemple #2
0
/* draw len chars at string */
static void draw_string(float x, float y, float z, float a, float r, float g,
		float b, char *str, int len) {
	int i;
	pvr_poly_cxt_t	cxt;
	pvr_poly_hdr_t	poly;

	pvr_poly_cxt_txr(&cxt, PVR_LIST_TR_POLY, PVR_TXRFMT_ARGB1555 | PVR_TXRFMT_NONTWIDDLED,
		256, 256, font_texture, PVR_FILTER_NONE);
	pvr_poly_compile(&poly, &cxt);
	pvr_prim(&poly, sizeof(poly));

	for (i = 0; i < len; i++) {
		draw_char(x, y, z, a, r, g, b, str[i]);
		x += CONIO_FONT_WIDTH;
	}
}
Exemple #3
0
static void
draw_texture (void)
{
  pvr_poly_cxt_t cxt;
  pvr_poly_hdr_t poly;
  pvr_vertex_t vert;
  float slice_width = 127.0;
  
  pvr_poly_cxt_txr (&cxt, PVR_LIST_TR_POLY,
		    PVR_TXRFMT_RGB565 | PVR_TXRFMT_NONTWIDDLED, 1024, 512,
		    warp_texture[1 - warp_active], PVR_FILTER_NONE);
  cxt.blend.src = PVR_BLEND_ONE;
  cxt.blend.dst = PVR_BLEND_INVDESTCOLOR;
  cxt.txr.env = PVR_TXRENV_MODULATE;
  pvr_poly_compile (&poly, &cxt);
  
  pvr_prim (&poly, sizeof (poly));
  
  vert.flags = PVR_CMD_VERTEX;
  vert.x = 320.0f - slice_width;
  vert.y = 480.0f;
  vert.z = flame_pos_xformed[2];
  vert.u = (320.0f - slice_width) / 1024.0f;
  vert.v = 480.0f / 512.0f;
  vert.argb = 0xffffffff;
  vert.oargb = 0;
  pvr_prim (&vert, sizeof (vert));
  
  vert.x = 320.0f - slice_width;
  vert.y = 0.0f;
  vert.u = (320.0f - slice_width) / 1024.0f;
  vert.v = 0.0;
  pvr_prim (&vert, sizeof (vert));
  
  vert.x = 320.0f + slice_width;
  vert.y = 480.0f;
  vert.u = (320.0f + slice_width) / 1024.0f;
  vert.v = 480.0f / 512.0f;
  pvr_prim (&vert, sizeof (vert));
  
  vert.flags = PVR_CMD_VERTEX_EOL;
  vert.x = 320.0f + slice_width;
  vert.y = 0.0f;
  vert.u = (320.0f + slice_width) / 1024.0f;
  vert.v = 0.0f;
  pvr_prim (&vert, sizeof (vert));
}
Exemple #4
0
static void
draw_backdrop (void)
{
  pvr_poly_cxt_t cxt;
  pvr_poly_hdr_t poly;
  pvr_vertex_t vert;
  
  pvr_poly_cxt_txr (&cxt, PVR_LIST_OP_POLY,
		    PVR_TXRFMT_RGB565 | PVR_TXRFMT_TWIDDLED, 512, 256,
		    backdrop_texture, PVR_FILTER_BILINEAR);
  pvr_poly_compile (&poly, &cxt);
  
  pvr_prim (&poly, sizeof (poly));
  
  vert.flags = PVR_CMD_VERTEX;
  vert.x = 0.0f;
  vert.y = 480.0f;
  vert.z = 0.001f;
  vert.u = 0.0f;
  vert.v = 1.0f;
  vert.argb = 0xff505050;
  vert.oargb = 0;
  pvr_prim (&vert, sizeof (vert));
  
  vert.x = 0.0f;
  vert.y = 0.0f;
  vert.u = 0.0f;
  vert.v = 0.0f;
  pvr_prim (&vert, sizeof (vert));
  
  vert.x = 640.0f;
  vert.y = 480.0f;
  vert.u = 1.0f;
  vert.v = 1.0f;
  pvr_prim (&vert, sizeof (vert));
  
  vert.flags = PVR_CMD_VERTEX_EOL;
  vert.x = 640.0f;
  vert.y = 0.0f;
  vert.u = 1.0f;
  vert.v = 0.0f;
  pvr_prim (&vert, sizeof (vert));
}
Exemple #5
0
void setup_util_texture() {
	uint16	*vram;
	int	x, y;
	pvr_poly_cxt_t	cxt;

	util_texture = pvr_mem_malloc(256*256*2);
	printf("util_texture at %08x\n", util_texture);
	vram = (uint16 *)util_texture;
	
	/* First dump in the mouse cursor */
	for (y=0; y<16; y++) {
		for (x=0; x<10; x++) {
			if (mouse1_xpm[y*10+x] == '.')
				*vram = 0xffff;
			else if (mouse1_xpm[y*10+x] == '+')
				*vram = 0xf000;
			else
				*vram = 0x0000;
			vram++;
		}
		vram += 256 - 10;
	}
	
	/* Now add the rest as ASCII characters */
	vram = (uint16 *)util_texture;
	for (y=0; y<8; y++) {
		for (x=0; x<16; x++) {
			/* Skip the first (it's a mouse pointer) */
			if (x != 0 || y != 0) 
				bfont_draw(vram, 256, 0, y*16+x);
			vram += 16;
		}
		vram += 23*256;
	}

	/* Setup a polygon header for the util texture */
	pvr_poly_cxt_txr(&cxt, PVR_LIST_TR_POLY, PVR_TXRFMT_ARGB4444 | PVR_TXRFMT_NONTWIDDLED,
		256, 256, util_texture, PVR_FILTER_NONE);
	pvr_poly_compile(&util_txr_hdr, &cxt);
}
Exemple #6
0
static void MakeVideoTexture(video_txr_t *txr, int width, int height, int format, int filler) {
	pvr_poly_cxt_t tmp;

	int tw,th;
	for(tw = 8; tw < width ; tw <<= 1);
	for(th = 8; th < height; th <<= 1);

	txr->width = width;
	txr->height = height;
	txr->tw = tw;
	txr->th = th;
	
	if(txr->addr || txr->backbuf) {
		FreeVideoTexture(txr);
	}
	
	txr->backbuf = memalign(32, txr->tw * txr->height * 2);
	txr->addr = pvr_mem_malloc(tw * th * 2);
	
	pvr_poly_cxt_txr(&tmp, PVR_LIST_OP_POLY, format, tw, th, txr->addr, filler);
	pvr_poly_compile(&txr->hdr, &tmp);
}
Exemple #7
0
void Draw_Layer(){
	int i;
	int z;
	i = LAYER_SIZE;
	while(i--){
		Transform_Quad(&Layer[i]);
	}
	
	i = LAYER_SIZE;
	while(i--){
		z = LIGHTS;
		while(z--){
			LightQuad(&Layer[i],&Lights[z]);
		}
	}
	i = LAYER_SIZE;
	while(i--){
		pvr_poly_cxt_txr(&p_cxt,PVR_LIST_OP_POLY,GlobalTex.fmt,GlobalTex.w,GlobalTex.h,GlobalTex.txt,PVR_FILTER_BILINEAR);
		p_cxt.gen.shading = PVR_SHADE_GOURAUD;
		pvr_poly_compile(&p_hdr,&p_cxt);
		pvr_prim(&p_hdr,sizeof(p_hdr));
		Draw_Quad(&Layer[i]);
	}
}
Exemple #8
0
int main(int argc,char** argv){
	pvr_vertex_t v;
	Texture spr;
	pvr_poly_cxt_t p_cxt;
	pvr_poly_hdr_t p_hdr;
	
	Init();
	
	Load_VQTexture("/rd/billy.kmg",&spr);
	
	sndoggvorbis_start("/rd/billy.ogg",-1);
	int q = 0;
	while(q == 0){
		vid_border_color(255,0,0);
		pvr_wait_ready();
		vid_border_color(0,255,0);
		pvr_scene_begin();
		
		pvr_list_begin(PVR_LIST_OP_POLY);
		
		pvr_list_finish();
		
		pvr_list_begin(PVR_LIST_TR_POLY);
	
		pvr_poly_cxt_txr(&p_cxt,PVR_LIST_TR_POLY,spr.fmt,spr.w,spr.h,spr.txt,PVR_FILTER_BILINEAR);
		pvr_poly_compile(&p_hdr,&p_cxt);
		pvr_prim(&p_hdr,sizeof(p_hdr)); // submit header
		
		v.x = 0.0;
		v.y = 0.0;
		v.z = 1.0;
		v.u = 0.0;
		v.v = 0.0;
		v.argb = 0xffffffff;
		v.oargb = 0;
		v.flags = PVR_CMD_VERTEX;
		pvr_prim(&v,sizeof(v));
		
		
		v.x = 640.0;
		v.y = 0.0;
		v.u = 1.0;
		v.v = 0.0;
		pvr_prim(&v,sizeof(v));
		
		v.x = 0.0;
		v.y = 480.0;
		v.u = 0.0;
		v.v = 1.0;
		pvr_prim(&v,sizeof(v));
		
		v.x = 640.0;
		v.y = 480.0;
		v.u = 1.0;
		v.v = 1.0;
		v.flags = PVR_CMD_VERTEX_EOL;
		pvr_prim(&v,sizeof(v));
		pvr_list_finish();
		pvr_scene_finish();
		vid_border_color(0,0,255);
		
		
		MAPLE_FOREACH_BEGIN(MAPLE_FUNC_CONTROLLER, cont_state_t, st);
		
			if(st->buttons & CONT_START)
				q = 1;
		
		MAPLE_FOREACH_END();
		
	}
	
	DeleteTexture(&spr);
	
	sndoggvorbis_stop();
	pvr_shutdown();
	sndoggvorbis_shutdown();
	return 0;
}
Exemple #9
0
static void
draw_box (void)
{
  pvr_poly_cxt_t cxt;
  pvr_poly_hdr_t poly;
  pvr_vertex_t vert;
  int x, y;
  int ox, oy;
  float offset[21][16][2];

  pvr_poly_cxt_txr (&cxt, PVR_LIST_OP_POLY,
		    PVR_TXRFMT_RGB565 | PVR_TXRFMT_NONTWIDDLED, 1024, 512,
		    warp_texture[1 - warp_active], PVR_FILTER_BILINEAR);
  pvr_poly_compile (&poly, &cxt);
  
  for (oy = 0; oy <= 15; oy++)
    for (ox = 0; ox <= 20; ox++)
      {
        offset[ox][oy][0] = 2.0 * perlin_noise_2D (ox, oy + perlin_phase, 2);
	offset[ox][oy][1]
	  = -4.0 - 2.0 * perlin_noise_2D (ox + 40, oy + perlin_phase, 2);
      }
  
  for (oy = 0, y = 0; y < 480; oy++, y += 32)
    {
      pvr_prim (&poly, sizeof (poly));

      vert.flags = PVR_CMD_VERTEX;
      vert.x = offset[0][oy + 1][0];
      vert.y = y + 32 + offset[0][oy + 1][1];
      vert.z = DISTORT_DEPTH;
      vert.u = 0.0f;
      vert.v = (float) (y + 32) / 512.0f;
      vert.argb = 0xffffffff;
      vert.oargb = 0;
      pvr_prim (&vert, sizeof (vert));

      vert.x = offset[0][oy][0];
      vert.y = y + offset[0][oy][1];
      vert.v = (float) y / 512.0f;
      pvr_prim (&vert, sizeof (vert));

      for (ox = 1, x = 32; x < 640; ox++, x += 32)
        {
	  int is_last = (x == 640 - 32);

	  vert.x = x + offset[ox][oy + 1][0];
	  vert.y = y + 32 + offset[ox][oy + 1][1];
	  vert.u = (float) x / 1024.0f;
	  vert.v = (float) (y + 32) / 512.0f;
	  pvr_prim (&vert, sizeof (vert));

	  if (is_last)
	    vert.flags = PVR_CMD_VERTEX_EOL;
	    
	  vert.x = x + offset[ox][oy][0];
	  vert.y = y + offset[ox][oy][1];
	  vert.v = (float) y / 512.0f;
	  pvr_prim (&vert, sizeof (vert));
        }
    }

  rot1 += 0.005;
  if (rot1 > 2 * M_PI)
    rot1 -= 2 * M_PI;
  
  perlin_phase += 0.03;
}
Exemple #10
0
static void
draw_cooler (void)
{
  pvr_poly_cxt_t cxt;
  pvr_poly_hdr_t poly;
  pvr_vertex_t vert;
  
  pvr_poly_cxt_txr (&cxt, PVR_LIST_TR_POLY,
		    PVR_TXRFMT_ARGB4444 | PVR_TXRFMT_TWIDDLED, COOL_X, COOL_Y,
		    cooling_texture, PVR_FILTER_BILINEAR);
  pvr_poly_compile (&poly, &cxt);
  
  pvr_prim (&poly, sizeof (poly));
  
  vert.flags = PVR_CMD_VERTEX;
  vert.x = 0.0f;
  vert.y = 480.0f;
  vert.z = COOLING_DEPTH;
  vert.u = 0.0f;
  vert.v = cooling_offset / 512.0f;
  vert.argb = 0xffffffff;
  vert.oargb = 0;
  pvr_prim (&vert, sizeof (vert));
  
  vert.x = 0.0f;
  vert.y = 0.0f;
  vert.v = (cooling_offset + 480.0f) / 512.0f;
  pvr_prim (&vert, sizeof (vert));
  
  vert.x = 640.0f;
  vert.y = 480.0f;
  vert.u = 640.0f / 1024.0f;
  vert.v = cooling_offset / 512.0f;
  pvr_prim (&vert, sizeof (vert));
  
  vert.flags = PVR_CMD_VERTEX_EOL;
  vert.x = 640.0f;
  vert.y = 0.0f;
  vert.u = 640.0f / 1024.0f;
  vert.v = (cooling_offset + 480.0f) / 512.0f;
  pvr_prim (&vert, sizeof (vert));

  /* Draw the flame bit too!  */
  {
    pvr_poly_cxt_t cxt;
    pvr_poly_hdr_t hdr;
    int i;
    
    pvr_poly_cxt_txr (&cxt, PVR_LIST_TR_POLY,
		      PVR_TXRFMT_RGB565 | PVR_TXRFMT_TWIDDLED,
		      256, 256, flame_texture, PVR_FILTER_BILINEAR);
    cxt.blend.src = PVR_BLEND_ONE;
    cxt.blend.dst = PVR_BLEND_ONE;
    cxt.txr.env = PVR_TXRENV_MODULATE;
    pvr_poly_compile (&hdr, &cxt);
    
    pvr_prim (&hdr, sizeof (hdr));
    
    for (i = 0; i < 20; i++)
      {
        float ang = (float) i * 2 * M_PI / 20.0f;
	float ang1 = (float) (i + 1) * 2 * M_PI / 20.0f;
	float amp = audio_amplitude (66);

        vert.flags = PVR_CMD_VERTEX;
	vert.x = flame_pos_xformed[0];
	vert.y = flame_pos_xformed[1];
	vert.z = SEED_DEPTH;
	vert.u = vert.v = 0.5;
	vert.argb = 0xffffffff;
	vert.oargb = 0x0;
	pvr_prim (&vert, sizeof (vert));
	
	vert.flags = PVR_CMD_VERTEX;
	vert.x = flame_pos_xformed[0] + fcos (ang) * (40 + amp * 10);
	vert.y = flame_pos_xformed[1] - 30 + fsin (ang) * 60;
	vert.u = 0.5 + fcos (rot1) * 0.5;
	vert.v = 0.5 + fsin (rot1) * 0.5;
	pvr_prim (&vert, sizeof (vert));
	
	vert.flags = PVR_CMD_VERTEX_EOL;
	vert.x = flame_pos_xformed[0] + fcos (ang1) * (40 + amp * 10);
	vert.y = flame_pos_xformed[1] - 30 + fsin (ang1) * 60;
	pvr_prim (&vert, sizeof (vert));
      }
  }

  cooling_offset -= 3;
  if (cooling_offset < 0)
    cooling_offset += 512;
}