copy_mesh
authorJohn Tsiombikas <nuclear@member.fsf.org>
Fri, 20 Dec 2019 10:23:49 +0000 (12:23 +0200)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Fri, 20 Dec 2019 10:23:49 +0000 (12:23 +0200)
src/mesh.c
src/mesh.h
src/scr/infcubes.c

index 88c6edc..0e8d869 100644 (file)
@@ -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;
index 7744ae7..410863a 100644 (file)
@@ -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);
 
index dd1bd33..3a21513 100644 (file)
@@ -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);