X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fmesh.c;h=0e8d869312be48dd74ef09c03d8bdd24b557fb63;hp=ce26e6880bd8e0dfec74c8ddc2daae0ac09e3d28;hb=d956a9d9273eebfacfda58cb3bafff017269d5dc;hpb=9ecf7c26db456b3cef34a7d6d79ffb164cad17c5 diff --git a/src/mesh.c b/src/mesh.c index ce26e68..0e8d869 100644 --- a/src/mesh.c +++ b/src/mesh.c @@ -5,6 +5,40 @@ #include "mesh.h" #include "3dgfx.h" +void free_mesh(struct g3d_mesh *mesh) +{ + destroy_mesh(mesh); + free(mesh); +} + +void destroy_mesh(struct g3d_mesh *mesh) +{ + free(mesh->varr); + free(mesh->iarr); +} + +int copy_mesh(struct g3d_mesh *dest, struct g3d_mesh *src) +{ + dest->prim = src->prim; + if(src->varr) { + if(!(dest->varr = malloc(src->vcount * sizeof *src->varr))) { + return -1; + } + memcpy(dest->varr, src->varr, src->vcount * sizeof *src->varr); + } + dest->vcount = src->vcount; + if(src->iarr) { + if(!(dest->iarr = malloc(src->icount * sizeof *src->iarr))) { + free(dest->varr); + dest->varr = 0; + return -1; + } + memcpy(dest->iarr, src->iarr, src->icount * sizeof *src->iarr); + } + dest->icount = src->icount; + return 0; +} + static struct { int prim; struct g3d_vertex *varr;