From 7dc2c0d02e6fb4fbdafb15bd66aa7d45768eb6ac Mon Sep 17 00:00:00 2001 From: rodri Date: Fri, 23 Aug 2024 12:41:28 +0000 Subject: methods to add primitives and materials to a Model. --- scene.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'scene.c') diff --git a/scene.c b/scene.c index d4d1872..7cf6868 100644 --- a/scene.c +++ b/scene.c @@ -8,6 +8,22 @@ #include "graphics.h" #include "internal.h" +static int +model_addprim(Model *m, Primitive p) +{ + m->prims = erealloc(m->prims, ++m->nprims*sizeof(*m->prims)); + m->prims[m->nprims-1] = p; + return 0; +} + +static int +model_addmaterial(Model *m, Material mtl) +{ + m->materials = erealloc(m->materials, ++m->nmaterials*sizeof(*m->materials)); + m->materials[m->nmaterials-1] = mtl; + return 0; +} + Model * newmodel(void) { @@ -15,6 +31,8 @@ newmodel(void) m = emalloc(sizeof *m); memset(m, 0, sizeof *m); + m->addprim = model_addprim; + m->addmaterial = model_addmaterial; return m; } @@ -35,6 +53,7 @@ dupmodel(Model *m) for(i = 0; i < m->nmaterials; i++){ nm->materials[i] = m->materials[i]; nm->materials[i].diffusemap = duptexture(m->materials[i].diffusemap); + nm->materials[i].specularmap = duptexture(m->materials[i].specularmap); nm->materials[i].normalmap = duptexture(m->materials[i].normalmap); nm->materials[i].name = strdup(m->materials[i].name); if(nm->materials[i].name == nil) @@ -62,6 +81,7 @@ delmodel(Model *m) freetexture(m->tex); while(m->nmaterials--){ freetexture(m->materials[m->nmaterials].diffusemap); + freetexture(m->materials[m->nmaterials].specularmap); freetexture(m->materials[m->nmaterials].normalmap); free(m->materials[m->nmaterials].name); } -- cgit v1.2.3