X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fmesh.c;h=40b1bb1fee6e098b9f423b70a41353e31c836378;hp=0dc6bf6b54268f16728cab72d6900c335eabaeb5;hb=a5c65ceb155188c8acee31a475f8db9f5b58f4b6;hpb=32ff3cf2d7d7a5ae82f5ca400b320c67e6984ad6 diff --git a/src/mesh.c b/src/mesh.c index 0dc6bf6..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; @@ -304,7 +303,6 @@ int gen_cube_mesh(struct g3d_mesh *mesh, float sz, int sub) int i; struct g3d_mesh *m; struct g3d_mesh tmpmesh; - float xform[16]; static float rotface[][4] = { {0, 0, 1, 0}, {90, 0, 1, 0}, @@ -324,8 +322,7 @@ int gen_cube_mesh(struct g3d_mesh *mesh, float sz, int sub) g3d_load_identity(); g3d_rotate(rotface[i][0], rotface[i][1], rotface[i][2], rotface[i][3]); g3d_translate(0, 0, sz / 2.0f); - g3d_get_matrix(G3D_MODELVIEW, xform); - apply_mesh_xform(m, xform); + apply_mesh_xform(m, g3d_get_matrix(G3D_MODELVIEW, 0)); if(i > 0) { if(append_mesh(mesh, m) == -1) { return -1;