probably fixed loading
[vrtris] / src / cmesh.c
index 3190576..115f778 100644 (file)
@@ -49,6 +49,7 @@ static void update_wire_ibo(struct cmesh *cm);
 static void calc_aabb(struct cmesh *cm);
 static void calc_bsph(struct cmesh *cm);
 
+static int def_nelem[CMESH_NUM_ATTR] = {3, 3, 3, 2, 4, 4, 4, 2};
 
 static int sdr_loc[CMESH_NUM_ATTR] = {0, 1, 2, 3, 4, 5, 6, 7};
 static int use_custom_sdr_attr;
@@ -369,19 +370,29 @@ int cmesh_attrib_count(struct cmesh *cm, int attr)
 int cmesh_push_attrib(struct cmesh *cm, int attr, float *v)
 {
        float *vptr;
-       int i;
-       int cursz = dynarr_size(cm->vattr[attr].data);
-       int newsz = cursz + cm->vattr[attr].nelem;
+       int i, cursz, newsz;
+
+       if(!cm->vattr[attr].nelem) {
+               cm->vattr[attr].nelem = def_nelem[attr];
+       }
 
+       cursz = dynarr_size(cm->vattr[attr].data);
+       newsz = cursz + cm->vattr[attr].nelem;
        if(!(vptr = dynarr_resize(cm->vattr[attr].data, newsz))) {
                return -1;
        }
        cm->vattr[attr].data = vptr;
        vptr += cursz;
+
        for(i=0; i<cm->vattr[attr].nelem; i++) {
                *vptr++ = *v++;
        }
+       cm->vattr[attr].data_valid = 1;
        cm->vattr[attr].vbo_valid = 0;
+
+       if(attr == CMESH_ATTR_VERTEX) {
+               cm->nverts = newsz / cm->vattr[attr].nelem;
+       }
        return 0;
 }
 
@@ -500,6 +511,10 @@ int cmesh_push_index(struct cmesh *cm, unsigned int idx)
                return -1;
        }
        cm->idata = iptr;
+       cm->idata_valid = 1;
+       cm->ibo_valid = 0;
+
+       cm->nfaces = dynarr_size(cm->idata) / 3;
        return 0;
 }