X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fmesh.c;h=1811bb6112e89480c05d6adda595395cb699bcf3;hb=0492cd9f104920e15a6ad3e7751bfe68b3bdaca7;hp=dbafcbdc9d006ffa8d775bd7e7d5b1b5b6abf4c5;hpb=0a754b5aac897ffde09e93027aed78c95b81b99b;p=vrlugburz diff --git a/src/mesh.c b/src/mesh.c index dbafcbd..1811bb6 100644 --- a/src/mesh.c +++ b/src/mesh.c @@ -16,6 +16,7 @@ void init_mesh(struct mesh *m) void destroy_mesh(struct mesh *m) { + free(m->name); free(m->varr); free(m->iarr); @@ -29,9 +30,11 @@ void destroy_mesh(struct mesh *m) void clear_mesh(struct mesh *m) { + free(m->name); free(m->varr); free(m->iarr); + m->name = 0; m->varr = 0; m->iarr = 0; m->num_verts = m->max_verts = m->num_idx = m->max_idx = 0; @@ -43,6 +46,10 @@ int copy_mesh(struct mesh *dest, struct mesh *src) { init_mesh(dest); + if(src->name) { + dest->name = strdup(src->name); + } + if(src->max_verts && !(dest->varr = malloc(src->max_verts * sizeof *dest->varr))) { return -1; } @@ -302,7 +309,7 @@ static int update_mesh_vbo(struct mesh *m) static int update_meshgroup_vbo(struct meshgroup *mg) { - int i; + int i, j, idx0 = 0; struct vertex *varr, *vptr; unsigned int *iarr = 0, *iptr; struct mesh *m; @@ -337,8 +344,10 @@ static int update_meshgroup_vbo(struct meshgroup *mg) vptr += m->num_verts; if(iarr) { - memcpy(iptr, m->iarr, m->num_idx * sizeof *iptr); - iptr += m->num_idx; + for(j=0; jnum_idx; j++) { + *iptr++ = m->iarr[j] + idx0; + } + idx0 += m->num_idx; } } @@ -370,8 +379,8 @@ void xform_mesh(struct mesh *mesh, float *mat) mesh->bbvalid = 0; for(i=0; inum_verts; i++) { - cgm_vmul_v3m4(&mesh->varr[i].pos, mat); - cgm_vmul_v3m3(&mesh->varr[i].norm, mat); - cgm_vmul_v3m3(&mesh->varr[i].tang, mat); + cgm_vmul_m4v3(&mesh->varr[i].pos, mat); + cgm_vmul_m3v3(&mesh->varr[i].norm, mat); + cgm_vmul_m3v3(&mesh->varr[i].tang, mat); } }