From 3eeca1cc95bdeaf3f6be3fd6064a065e39c08eda Mon Sep 17 00:00:00 2001 From: John Tsiombikas Date: Fri, 20 Dec 2019 12:23:49 +0200 Subject: [PATCH] copy_mesh --- src/mesh.c | 22 ++++++++++++++++++++++ src/mesh.h | 2 ++ src/scr/infcubes.c | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/mesh.c b/src/mesh.c index 88c6edc..0e8d869 100644 --- a/src/mesh.c +++ b/src/mesh.c @@ -17,6 +17,28 @@ void destroy_mesh(struct g3d_mesh *mesh) 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; diff --git a/src/mesh.h b/src/mesh.h index 7744ae7..410863a 100644 --- a/src/mesh.h +++ b/src/mesh.h @@ -13,6 +13,8 @@ struct g3d_mesh { void free_mesh(struct g3d_mesh *mesh); void destroy_mesh(struct g3d_mesh *mesh); +int copy_mesh(struct g3d_mesh *dest, struct g3d_mesh *src); + int load_mesh(struct g3d_mesh *mesh, const char *fname); int save_mesh(struct g3d_mesh *mesh, const char *fname); diff --git a/src/scr/infcubes.c b/src/scr/infcubes.c index dd1bd33..3a21513 100644 --- a/src/scr/infcubes.c +++ b/src/scr/infcubes.c @@ -67,7 +67,7 @@ static int init(void) if(load_mesh(&mesh_cube, "data/bevelbox.obj") == -1) { return -1; } - if(load_mesh(&mesh_cube2, "data/bevelbox.obj") == -1) { + if(copy_mesh(&mesh_cube2, &mesh_cube) == -1) { return -1; } apply_mesh_xform(&mesh_cube2, scalemat); -- 1.7.10.4