projects
/
vrtris
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
probably fixed loading
[vrtris]
/
src
/
cmesh.c
diff --git
a/src/cmesh.c
b/src/cmesh.c
index
3190576
..
115f778
100644
(file)
--- 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 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;
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 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;
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++;
}
for(i=0; i<cm->vattr[attr].nelem; i++) {
*vptr++ = *v++;
}
+ cm->vattr[attr].data_valid = 1;
cm->vattr[attr].vbo_valid = 0;
cm->vattr[attr].vbo_valid = 0;
+
+ if(attr == CMESH_ATTR_VERTEX) {
+ cm->nverts = newsz / cm->vattr[attr].nelem;
+ }
return 0;
}
return 0;
}
@@
-500,6
+511,10
@@
int cmesh_push_index(struct cmesh *cm, unsigned int idx)
return -1;
}
cm->idata = iptr;
return -1;
}
cm->idata = iptr;
+ cm->idata_valid = 1;
+ cm->ibo_valid = 0;
+
+ cm->nfaces = dynarr_size(cm->idata) / 3;
return 0;
}
return 0;
}