g3d_curcidx = cidx;
}
-static const int primverts[] = {1, 2, 3, 4};
+static const int primverts[] = {0, 1, 2, 3, 4};
void g3d_draw(int prim, struct g3d_vertex *varr, int vcount)
{
prim_vnum = primverts[prim];
for(i=0; i<vcount; i+=prim_vnum) {
- g3d_draw_prim(prim, varr);
+ g3d_draw_prim(prim, varr, 0);
varr += prim_vnum;
}
}
+void g3d_draw_indexed(int prim, struct g3d_vertex *varr, unsigned short *idxarr,
+ int idxcount)
+{
+ int i, j, prim_vnum;
+
+ prim_vnum = primverts[prim];
+
+ for(i=0; i<idxcount; i+=prim_vnum) {
+ g3d_draw_prim(prim, varr, idxarr);
+ idxarr += prim_vnum;
+ }
+}
+
int32_t vpscale(int32_t x, int32_t s, int32_t shift);
#pragma aux vpscale = \
"add eax, 0x100" \
modify [eax edx];
-void g3d_draw_prim(int prim, struct g3d_vertex *varr)
+void g3d_draw_prim(int prim, struct g3d_vertex *varr, unsigned short *idxarr)
{
int i, vcount, x, y, x1, y1;
struct g3d_vertex v[4];
vcount = primverts[prim];
for(i=0; i<vcount; i++) {
- v[i] = varr[i];
+ v[i] = idxarr ? varr[idxarr[i]] : varr[i];
/* transform to view space */
g3d_xform(v + i, mvmat);