X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fmesh.c;h=40b1bb1fee6e098b9f423b70a41353e31c836378;hp=af5936e8c7c69972a89b40d3eb87fa4934df4368;hb=a5c65ceb155188c8acee31a475f8db9f5b58f4b6;hpb=e5393153629cb39ea6af0ca4a35370442127c5c2 diff --git a/src/mesh.c b/src/mesh.c index af5936e..40b1bb1 100644 --- a/src/mesh.c +++ b/src/mesh.c @@ -6,48 +6,46 @@ #include "3dgfx.h" static struct { + int prim; struct g3d_vertex *varr; const float *xform; } zsort_cls; static int zsort_cmp(const void *aptr, const void *bptr) { + int i; + float za = 0.0f; + float zb = 0.0f; const float *m = zsort_cls.xform; - const struct g3d_vertex *va = (const struct g3d_vertex*)aptr; const struct g3d_vertex *vb = (const struct g3d_vertex*)bptr; - float za = m[2] * va->x + m[6] * va->y + m[10] * va->z + m[14]; - float zb = m[2] * vb->x + m[6] * vb->y + m[10] * vb->z + m[14]; - - ++va; - ++vb; - - za += m[2] * va->x + m[6] * va->y + m[10] * va->z + m[14]; - zb += m[2] * vb->x + m[6] * vb->y + m[10] * vb->z + m[14]; - + for(i=0; ix + m[6] * va->y + m[10] * va->z + m[14]; + zb += m[2] * vb->x + m[6] * vb->y + m[10] * vb->z + m[14]; + ++va; + ++vb; + } return za - zb; } static int zsort_indexed_cmp(const void *aptr, const void *bptr) { + int i; + float za = 0.0f; + float zb = 0.0f; const uint16_t *a = (const uint16_t*)aptr; const uint16_t *b = (const uint16_t*)bptr; const float *m = zsort_cls.xform; - const struct g3d_vertex *va = zsort_cls.varr + a[0]; - const struct g3d_vertex *vb = zsort_cls.varr + b[0]; - - float za = m[2] * va->x + m[6] * va->y + m[10] * va->z + m[14]; - float zb = m[2] * vb->x + m[6] * vb->y + m[10] * vb->z + m[14]; - - va = zsort_cls.varr + a[2]; - vb = zsort_cls.varr + b[2]; - - za += m[2] * va->x + m[6] * va->y + m[10] * va->z + m[14]; - zb += m[2] * vb->x + m[6] * vb->y + m[10] * vb->z + m[14]; + for(i=0; ix + m[6] * va->y + m[10] * va->z + m[14]; + zb += m[2] * vb->x + m[6] * vb->y + m[10] * vb->z + m[14]; + } return za - zb; } @@ -56,6 +54,7 @@ void zsort_mesh(struct g3d_mesh *m) { zsort_cls.varr = m->varr; zsort_cls.xform = g3d_get_matrix(G3D_MODELVIEW, 0); + zsort_cls.prim = m->prim; if(m->iarr) { int nfaces = m->icount / m->prim;