Exemplo n.º 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));

}
Exemplo n.º 2
0
inline void Draw_Quad(Quad* qd){

	qd->verts[0].trans.argb = PVR_PACK_COLOR(0.0,qd->verts[0].FinalColor.x,qd->verts[0].FinalColor.y,qd->verts[0].FinalColor.z);
	pvr_prim(&qd->verts[0].trans,sizeof(pvr_vertex_t));
	qd->verts[0].FinalColor.x = 0;
	qd->verts[0].FinalColor.y = 0;
	qd->verts[0].FinalColor.z = 0; 
		
	qd->verts[1].trans.argb = PVR_PACK_COLOR(0.0,qd->verts[1].FinalColor.x,qd->verts[1].FinalColor.y, \
												qd->verts[1].FinalColor.z);;
	pvr_prim(&qd->verts[1].trans,sizeof(pvr_vertex_t));
	qd->verts[1].FinalColor.x = 0;
	qd->verts[1].FinalColor.y = 0;
	qd->verts[1].FinalColor.z = 0; 
		
	qd->verts[2].trans.argb = PVR_PACK_COLOR(0.0,qd->verts[2].FinalColor.x,qd->verts[2].FinalColor.y, \
												qd->verts[2].FinalColor.z);;
	pvr_prim(&qd->verts[2].trans,sizeof(pvr_vertex_t));
	qd->verts[2].FinalColor.x = 0;
	qd->verts[2].FinalColor.y = 0;
	qd->verts[2].FinalColor.z = 0; 
		
	qd->verts[3].trans.argb = PVR_PACK_COLOR(0.0,qd->verts[3].FinalColor.x,qd->verts[3].FinalColor.y, \
												qd->verts[3].FinalColor.z);;
	pvr_prim(&qd->verts[3].trans,sizeof(pvr_vertex_t));
	qd->verts[3].FinalColor.x = 0;
	qd->verts[3].FinalColor.y = 0;
	qd->verts[3].FinalColor.z = 0; 
}
Exemplo n.º 3
0
/* draw a box (used by cursor and border, etc) (at 1.0f z coord) */
static void draw_box(float x, float y, float w, float h, float a, float r, float g, float b) {
	pvr_poly_cxt_t	cxt;
	pvr_poly_hdr_t	poly;
	pvr_vertex_t	vert;

	pvr_poly_cxt_col(&cxt, PVR_LIST_TR_POLY);
	pvr_poly_compile(&poly, &cxt);
	pvr_prim(&poly, sizeof(poly));

	vert.flags = PVR_CMD_VERTEX;
	vert.x = x;
	vert.y = y + h;
	vert.z = 1.0f;
	vert.u = vert.v = 0.0f;
	vert.argb = PVR_PACK_COLOR(a, r, g, b);
	vert.oargb = 0;
	pvr_prim(&vert, sizeof(vert));

	vert.y -= h;
	pvr_prim(&vert, sizeof(vert));

	vert.y += h;
	vert.x += w;
	pvr_prim(&vert, sizeof(vert));

	vert.flags = PVR_CMD_VERTEX_EOL;
	vert.y -= h;
	pvr_prim(&vert, sizeof(vert));
}
Exemplo n.º 4
0
void do_frame() {
    pvr_modifier_vol_t mod;
    int i;

    pvr_wait_ready();
    pvr_scene_begin();
    pvr_list_begin(list);

    pvr_prim(&phdr, sizeof(phdr));

    for(i = 0; i < NUM_POLYS; ++i) {
        pvr_prim(&verts[i * 4], sizeof(verts[i * 4]));
        pvr_prim(&verts[i * 4 + 1], sizeof(verts[i * 4 + 1]));
        pvr_prim(&verts[i * 4 + 2], sizeof(verts[i * 4 + 2]));
        pvr_prim(&verts[i * 4 + 3], sizeof(verts[i * 4 + 3]));
    }

    pvr_list_finish();

    pvr_list_begin(list + 1);

    pvr_prim(&mhdr, sizeof(mhdr));

    mod.flags = PVR_CMD_VERTEX_EOL;
    mod.ax = mx;
    mod.ay = my + 50.0f;
    mod.az = 150.0f;
    mod.bx = mx;
    mod.by = my;
    mod.bz = 150.0f;
    mod.cx = mx + 50.0f;
    mod.cy = my + 50.0f;
    mod.cz = 150.0f;
    mod.d1 = mod.d2 = mod.d3 = mod.d4 = mod.d5 = mod.d6 = 0;
    pvr_prim(&mod, sizeof(mod));

    pvr_prim(&mhdr2, sizeof(mhdr2));

    mod.flags = PVR_CMD_VERTEX_EOL;
    mod.ax = mx;
    mod.ay = my;
    mod.az = 150.0f;
    mod.bx = mx + 50.0f;
    mod.by = my + 50.0f;
    mod.bz = 150.0f;
    mod.cx = mx + 50.0f;
    mod.cy = my;
    mod.cz = 150.0f;
    mod.d1 = mod.d2 = mod.d3 = mod.d4 = mod.d5 = mod.d6 = 0;
    pvr_prim(&mod, sizeof(mod));

    pvr_list_finish();
    pvr_scene_finish();
}
Exemplo n.º 5
0
/* Draw one font character (6x12) */
static void draw_char(float x1, float y1, float z1, float a, float r,
		float g, float b, int c) {
	pvr_vertex_t	vert;
	int ix, iy;
	float u1, v1, u2, v2;

	if (c == ' ')
		return;

	// assert( c > ' ' && c < 127 );
	if (!( c > ' ' && c < 127 ))
		return;
	
	ix = (c % 16) * 16;
	iy = (c / 16) * 24;
	u1 = ix * 1.0f / 256.0f;
	v1 = iy * 1.0f / 256.0f;
	u2 = (ix+12) * 1.0f / 256.0f;
	v2 = (iy+24) * 1.0f / 256.0f;

	vert.flags = PVR_CMD_VERTEX;
	vert.x = x1;
	vert.y = y1 + CONIO_FONT_HEIGHT;
	vert.z = z1;
	vert.u = u1;
	vert.v = v2;
	vert.argb = PVR_PACK_COLOR(a, r, g, b);
	vert.oargb = 0;
	pvr_prim(&vert, sizeof(vert));
	
	vert.x = x1;
	vert.y = y1;
	vert.u = u1;
	vert.v = v1;
	pvr_prim(&vert, sizeof(vert));
	
	vert.x = x1 + CONIO_FONT_WIDTH;
	vert.y = y1 + CONIO_FONT_HEIGHT;
	vert.u = u2;
	vert.v = v2;
	pvr_prim(&vert, sizeof(vert));

	vert.flags = PVR_CMD_VERTEX_EOL;
	vert.x = x1 + CONIO_FONT_WIDTH;
	vert.y = y1;
	vert.u = u2;
	vert.v = v1;
	pvr_prim(&vert, sizeof(vert));
}
Exemplo n.º 6
0
void plx_cxt_send(int type) {
	switch (type) {
	case PVR_LIST_OP_POLY:
		pvr_prim(&hdr_working_op, sizeof(pvr_poly_hdr_t));
		break;
	case PVR_LIST_TR_POLY:
		pvr_prim(&hdr_working_tr, sizeof(pvr_poly_hdr_t));
		break;
	case PVR_LIST_PT_POLY:
		pvr_prim(&hdr_working_pt, sizeof(pvr_poly_hdr_t));
		break;
	default:
		assert_msg( 0, "List type not handled by plx_cxt_send" );
	}
}
Exemplo n.º 7
0
static void RenderVideoTexture(video_txr_t *txr, int x, int y, int w, int h, int color) {
	
	pvr_vertex_t v;
	pvr_prim(&txr->hdr, sizeof(txr->hdr));

	float u0,v0,u1,v1;
	float x0,y0,x1,y1;

	u0 = 0;
	v0 = 0;
	u1 = (float)txr->width/txr->tw;
	v1 = (float)txr->height/txr->th;

	x0 = x;
	y0 = y;
	x1 = x + w;
	y1 = y + h;

	v.flags = PVR_CMD_VERTEX;
	v.argb = color;
	v.oargb = 0;
	v.z = 512;

	v.x = x0;
	v.y = y0;
	v.u = u0;
	v.v = v0;
	pvr_prim(&v,sizeof(v));

	v.x = x1;
	v.y = y0;
	v.u = u1;
	v.v = v0;
	pvr_prim(&v,sizeof(v));

	v.x = x0;
	v.y = y1;
	v.u = u0;
	v.v = v1;
	pvr_prim(&v,sizeof(v));

	v.flags = PVR_CMD_VERTEX_EOL;
	v.x = x1;
	v.y = y1;
	v.u = u1;
	v.v = v1;
	pvr_prim(&v,sizeof(v));
}
Exemplo n.º 8
0
void stars_one_frame() {
	int i, x1, y1, xn, yn, zn, c;


	/* Send polygon header to the TA using store queues */
	pvr_prim(&stars_header, sizeof(stars_header));

	/* Calculate each star's position and plot it on screen */
	for (i=0; i<NS; i++) {
		/* Calculate star perspective */
		xn = star_x[i]; yn = star_y[i]; zn = star_z[i];
		x1 = xn*zk / (zn + zk);
		y1 = yn*zk / (zn + zk);

		if (x1>-320 && y1>-240 && x1<320 && y1<240) {
			c = (zn * 256/640) & 0xff;
			poly_pnt(x1+320, y1+240, 1.0f, 4.0f, 255-c);
		} else {
			star_z[i] = 640;
		}

		/* Move star's Z coord to show motion inward */
		star_z[i]-=28;
	}
}
Exemplo n.º 9
0
void glKosModVolume9f(GLfloat ax, GLfloat ay, GLfloat az,
		   GLfloat bx, GLfloat by, GLfloat bz,
		   GLfloat cx, GLfloat cy, GLfloat cz) {

	assert_msg(0,"not implemented");
	vol_vbuf.flags = PVR_CMD_VERTEX_EOL;
	vol_vbuf.ax = ax;
	vol_vbuf.ay = ay;
	vol_vbuf.az = az;
	vol_vbuf.bx = bx;
	vol_vbuf.by = by;
	vol_vbuf.bz = bz;
	vol_vbuf.cx = cx;
	vol_vbuf.cy = cy;
	vol_vbuf.cz = cz;
	mat_transform((vector_t*)&vol_vbuf.ax, (vector_t*)&vol_xbuf.ax, 3, sizeof(vector_t));

	/* Can't use the alternating store queues cuz we're sending
	 * 64 bytes at once with this vertex type
	 */
	vol_xbuf.flags = vol_vbuf.flags;
	vol_xbuf.d1 = vol_xbuf.d2 = vol_xbuf.d3 = 0;
	vol_xbuf.d4 = vol_xbuf.d5 = vol_xbuf.d6 = 0; 
	pvr_prim(&vol_xbuf, sizeof(pvr_modifier_vol_t));
	//printf("[%2.2f, %2.2f]\n", cz, vol_xbuf.cz);
}
Exemplo n.º 10
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));
}
Exemplo n.º 11
0
void q3dFillerWireframeDrawLine(pvr_vertex_t *p1, pvr_vertex_t *p2, float thickness) {
	// create lineVector
	q3dTypeVector lineVector;
	q3dVectorSet3f(&lineVector, p1->x - p2->x, p1->y - p2->y, p1->z - p2->z);
	q3dVectorNormalize(&lineVector);

	// rotate 90 degrees
	float tmp = lineVector.y;
	lineVector.y = lineVector.x;
	lineVector.x = -tmp;

	// apply thickness
	lineVector.x *= thickness/2;
	lineVector.y *= thickness/2;

	// draw
	pvr_vertex_t vert;
	vert.argb = PVR_PACK_COLOR(1, 0, 0, 0);

	// top left
	vert.flags = PVR_CMD_VERTEX;
	vert.x = p1->x - lineVector.x;
	vert.y = p1->y - lineVector.y;
	vert.z = p1->z;
	pvr_prim(&vert, sizeof(pvr_vertex_t));

	// bottom left
	vert.x = p1->x + lineVector.x;
	vert.y = p1->y + lineVector.y;
	vert.z = p1->z;
	pvr_prim(&vert, sizeof(pvr_vertex_t));

	// top right
	vert.x = p2->x - lineVector.x;
	vert.y = p2->y - lineVector.y;
	vert.z = p2->z;
	pvr_prim(&vert, sizeof(pvr_vertex_t));

	// bottom right;
	vert.flags = PVR_CMD_VERTEX_EOL;
	vert.x = p2->x + lineVector.x;
	vert.y = p2->y + lineVector.y;
	vert.z = p2->z;
	pvr_prim(&vert, sizeof(pvr_vertex_t));
}
Exemplo n.º 12
0
void do_frame() {
    pvr_vertex_t vert;
    int x, y, z;
    int size;
    int i, col;

    vid_border_color(0, 0, 0);
    pvr_wait_ready();
    vid_border_color(255, 0, 0);
    pvr_scene_begin();
    pvr_list_begin(PVR_LIST_OP_POLY);
    pvr_prim(&hdr, sizeof(hdr));

    x = rand() % 640;
    y = rand() % 480;
    z = rand() % 100 + 1;
    col = rand () % 256;

    vert.flags = PVR_CMD_VERTEX;
    vert.x = x;
    vert.y = y;
    vert.z = z;
    vert.u = vert.v = 0.0f;
    vert.argb = col | (col << 8) | (col << 16) | 0xff000000;
    vert.oargb = 0;
    pvr_prim(&vert, sizeof(vert));

    for (i=0; i<polycnt; i++) {
        x = (x + ((rand() % 50) - 25)) % 640;
        y = (y + ((rand() % 50) - 25)) % 480;
        col = rand () % 256;
        vert.x = x;
        vert.y = y;
        vert.argb = col | (col << 8) | (col << 16) | 0xff000000;

        if (i == (polycnt-1))
            vert.flags = PVR_CMD_VERTEX_EOL;

        pvr_prim(&vert, sizeof(vert));
    }

    pvr_list_finish();
    pvr_scene_finish();
    vid_border_color(0, 255, 0);
}
Exemplo n.º 13
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));
}
Exemplo n.º 14
0
/* Draws a point using a triangle strip */
void poly_pnt(int x, int y, float z, float size, int color) {
	pvr_vertex_t vert;
	
	vert.flags = PVR_CMD_VERTEX;
	vert.x = x;
	vert.y = y + size;
	vert.z = z;
	vert.u = vert.v = 0.0f;
	vert.argb = PVR_PACK_COLOR(1.0f, color / 256.0f, color / 256.0f, color / 256.0f);
	vert.oargb = 0;
	pvr_prim(&vert, sizeof(vert));
	
	vert.y = y;
	pvr_prim(&vert, sizeof(vert));
	
	vert.flags = PVR_CMD_VERTEX_EOL;
	vert.x = x + size;
	vert.y = y + size;
	pvr_prim(&vert, sizeof(vert));
}
Exemplo n.º 15
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;
	}
}
Exemplo n.º 16
0
void send_mod_hdr(void) {
	mod_hdr.cmd = PVR_CMD_MODIFIER;
	mod_hdr.mode1 = (mod_type << PVR_TA_PM1_MODIFIERINST_SHIFT) & PVR_TA_PM1_MODIFIERINST_MASK;

	switch(gl_active_list) {
	case GL_LIST_OPAQUE_MOD:
		mod_hdr.cmd |= (PVR_LIST_OP_MOD << PVR_TA_CMD_TYPE_SHIFT) & PVR_TA_CMD_TYPE_MASK;
		break;
		case GL_LIST_TRANS_MOD:
		mod_hdr.cmd |= (PVR_LIST_TR_MOD << PVR_TA_CMD_TYPE_SHIFT) & PVR_TA_CMD_TYPE_MASK;
		break;
	default:
		assert_msg(0, "wrong list specified");
		break;		
	}
	pvr_prim(&mod_hdr, sizeof(pvr_poly_hdr_t));
}
Exemplo n.º 17
0
static void end_quads() {
	int i, j, order[4] = {3, 0, 2, 1};

	/* Should be four points in the buffer */
	assert_msg(gl_vbuf_top == 4, "Wrong number of vertices.");

	gl_vbuf[order[3]].flags = PVR_CMD_VERTEX_EOL;
	/* mat_transform((vector_t*)&gl_vbuf[0].x, (vector_t*)&gl_xbuf[0].x, 4, 
sizeof(pvr_vertex_t)); */

	for (i=0; i<4; i++) {
		float x = gl_vbuf[i].x, y = gl_vbuf[i].y, z = gl_vbuf[i].z, w = 1.0f;
		mat_trans_single4(x, y, z, w);
		gl_xbuf[i].x = x;
		gl_xbuf[i].y = y;
		if (w == 1.0f)
			gl_xbuf[i].z = ((gl_viewport_scale[2] * z) + gl_viewport_offset[2]);
		else
			gl_xbuf[i].z = w;
	}

	/* Throw it all to the TA using direct render */
	if (check_w(gl_xbuf, 4))
		for (i=0; i<4; i++) {
			j = order[i];
			vert_xbuf.flags     = gl_vbuf[j].flags;
			vert_xbuf.x         = gl_xbuf[j].x;
			vert_xbuf.y         = gl_xbuf[j].y;
			vert_xbuf.z         = gl_xbuf[j].z;
			vert_xbuf.u0        = gl_vbuf[j].u;
			vert_xbuf.v0        = gl_vbuf[j].v;
			vert_xbuf.argb0     = gl_vbuf[j].argb;
			vert_xbuf.oargb0    = gl_vbuf[j].oargb;
			vert_xbuf.u1        = 0.0f;
			vert_xbuf.v1        = 0.0f;
			vert_xbuf.argb1     = 0xff00ff00;
			vert_xbuf.oargb1    = 0xffff0000;
			pvr_prim(&vert_xbuf, sizeof(pvr_vertex_tpcm_t));
		}
}
Exemplo n.º 18
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]);
	}
}
Exemplo n.º 19
0
void do_frame() {
    pvr_vertex_t * vert;
    int x, y, z;
    int i, col;
    int seed = oldseed;
    pvr_dr_state_t dr_state;

#define nextnum() seed = seed * 1164525 + 1013904223;
#define getnum(mn) (seed & ((mn) - 1))

    vid_border_color(0, 0, 0);
    pvr_wait_ready();
    vid_border_color(255, 0, 0);
    pvr_scene_begin();
    pvr_list_begin(PVR_LIST_OP_POLY);
    pvr_prim(&hdr, sizeof(hdr));

    pvr_dr_init(dr_state);

    x = getnum(1024);
    nextnum();
    y = getnum(512);
    nextnum();
    z = getnum(128) + 1;
    nextnum();
    col = getnum(256);
    nextnum();

    vert = pvr_dr_target(dr_state);
    vert->flags = PVR_CMD_VERTEX;
    vert->x = x;
    vert->y = y;
    vert->z = z;
    vert->u = vert->v = 0.0f;
    vert->argb = col | (col << 8) | (col << 16) | 0xff000000;
    vert->oargb = 0;
    pvr_dr_commit(vert);

    for(i = 0; i < polycnt; i++) {
        x = (x + ((getnum(64)) - 32)) & 1023;
        nextnum();
        y = (y + ((getnum(64)) - 32)) % 511;
        nextnum();
        col = getnum(256);
        nextnum();
        vert = pvr_dr_target(dr_state);
        vert->flags = PVR_CMD_VERTEX;
        vert->x = x;
        vert->y = y;
        vert->z = z;
        vert->u = vert->v = 0.0f;
        vert->argb = col | (col << 8) | (col << 16) | 0xff000000;
        vert->oargb = 0;

        if(i == (polycnt - 1))
            vert->flags = PVR_CMD_VERTEX_EOL;

        pvr_dr_commit(vert);
    }

    pvr_list_finish();
    pvr_scene_finish();
    vid_border_color(0, 255, 0);
    oldseed = seed;
}
Exemplo n.º 20
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;
}
Exemplo n.º 21
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;
}
Exemplo n.º 22
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;
}