X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fcmesh.c;h=115f77866884a1b79cf56767df0a8dc2d4ba7ca3;hb=babbbd298a1c5b7379a4339a706113af851ae9f4;hp=31905761ac1e37f082d4d8411cdd46fa6c3fee39;hpb=06a83976694c970fcf42bfdfc91832e780ca4747;p=vrtris diff --git a/src/cmesh.c b/src/cmesh.c index 3190576..115f778 100644 --- a/src/cmesh.c +++ b/src/cmesh.c @@ -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; ivattr[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; }