void RDP_SetTileSize( u32 w0, u32 w1 ) { gDPSetTileSize( _SHIFTR( w1, 24, 3 ), // tile _SHIFTR( w0, 12, 12 ), // uls _SHIFTR( w0, 0, 12 ), // ult _SHIFTR( w1, 12, 12 ), // lrs _SHIFTR( w1, 0, 12 ) ); // lrt }
void makestuff(void) { int i; Gfx *gl1; Gfx *gl2; Gfx *gl1a; gl1 = &(dlist1[0]); gl1a = gl1; gl2 = &(dlist2[0]); /* * Check for array size problems */ #ifdef DEBUG if (tricnt > VCNT) { osSyncPrintf("Uh Oh -- tricnt > VCNT\n"); } #endif /* * Loop over triangles */ for (i=0; i<tricnt; i++) { /* * For display list #1... * * Texture */ gDPLoadTextureBlock(gl1++, &(texture[tindex1[i*3+0]]), G_IM_FMT_RGBA, G_IM_SIZ_32b, tindex1[i*3+1], tindex1[i*3+2], /* width, height */ 0, 0, 0, /* clamp,wrap,mirror flags */ G_TX_NOMASK, G_TX_NOMASK, /* Mask for s,t */ G_TX_NOLOD, G_TX_NOLOD); /* Shift for s,t */ gDPSetTileSize(gl1++, G_TX_RENDERTILE, /* tile # */ tcoords1[i][0] << 2, /* uls, 10.2 */ tcoords1[i][1] << 2, /* ult, 10.2 */ tcoords1[i][2] << 2, /* lrs, 10.2 */ tcoords1[i][3] << 2 /* lrt, 10.2 */ ); /* * Load verticies and render * (Note: Vertex loading could be more efficient) */ gSPVertex(gl1++, &(rsp_dynamic.tvface1[trilist[3*i]]), 1, 0); gSPVertex(gl1++, &(rsp_dynamic.tvface1[trilist[3*i+1]]), 1, 1); gSPVertex(gl1++, &(rsp_dynamic.tvface1[trilist[3*i+2]]), 1, 2); gSP1Triangle(gl1++, 0, 1, 2, 0); /* * For display list #2... * * Texture */ gDPLoadTextureBlock(gl2++, &(texture[tindex2[i*3+0]]), G_IM_FMT_RGBA, G_IM_SIZ_32b, tindex2[i*3+1], tindex2[i*3+2], /* width, height */ 0, 0, 0, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gDPSetTileSize(gl2++, 0, tcoords2[i][0] << 2, /* uls, 10.2 */ tcoords2[i][1] << 2, /* ult, 10.2 */ tcoords2[i][2] << 2, /* lrs, 10.2 */ tcoords2[i][3] << 2 /* lrt, 10.2 */ ); /* * Load verticies and render * (Note: Vertex loading could be more efficient) */ gSPVertex(gl2++, &(rsp_dynamic.tvface2[trilist[3*i]]), 1, 0); gSPVertex(gl2++, &(rsp_dynamic.tvface2[trilist[3*i+1]]), 1, 1); gSPVertex(gl2++, &(rsp_dynamic.tvface2[trilist[3*i+2]]), 1, 2); gSP1Triangle(gl2++, 0, 1, 2, 0); /* * Check for close to overrun */ if ((gl1-gl1a) + 50 > DLSIZE) { #ifdef DEBUG osSyncPrintf("Overflowed display list in makestuff -- truncating\n"); #endif gSPEndDisplayList(gl1++); gSPEndDisplayList(gl2++); return; } } /* for i */ gSPEndDisplayList(gl1++); gSPEndDisplayList(gl2++); } /* makestuff */