[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24227] branches/bmesh/blender/source/ blender/blenkernel/intern: test commit
Joseph Eagar
joeedh at gmail.com
Mon Nov 2 07:31:24 CET 2009
Revision: 24227
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24227
Author: joeedh
Date: 2009-11-02 07:31:23 +0100 (Mon, 02 Nov 2009)
Log Message:
-----------
test commit
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
branches/bmesh/blender/source/blender/blenkernel/intern/key.c
branches/bmesh/blender/source/blender/blenkernel/intern/node.c
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2009-11-02 00:30:52 UTC (rev 24226)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2009-11-02 06:31:23 UTC (rev 24227)
@@ -1989,67 +1989,74 @@
VECCOPY(vert->no, vertNormals[i]);
}
-/* adapted from mesh_calc_normals */
void CDDM_calc_normals(DerivedMesh *dm)
{
CDDerivedMesh *cddm = (CDDerivedMesh*)dm;
float (*temp_nors)[3];
float (*face_nors)[3];
- int i;
+ float (*vert_nors)[3];
+ int i, j, *origIndex;
int numVerts = dm->numVertData;
int numFaces = dm->numFaceData;
MFace *mf;
+ MPoly *mp;
MVert *mv;
+ MLoop *ml;
if(numVerts == 0) return;
- temp_nors = MEM_callocN(numVerts * sizeof(*temp_nors),
- "CDDM_calc_normals temp_nors");
+ if (CustomData_has_layer(&dm->faceData, CD_NORMAL))
+ CustomData_free_layer(&dm->faceData, CD_NORMAL, dm->numFaceData, 0);
- /* we don't want to overwrite any referenced layers */
- mv = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MVERT);
- cddm->mvert = mv;
+ /*recalc tesselation to ensure we have valid origindex values
+ for mface->mpoly lookups.*/
+ cdDM_recalcTesselation(dm);
- /* make a face normal layer if not present */
- face_nors = CustomData_get_layer(&dm->faceData, CD_NORMAL);
- if(!face_nors)
- face_nors = CustomData_add_layer(&dm->faceData, CD_NORMAL, CD_CALLOC,
- NULL, dm->numFaceData);
+ numFaces = dm->numFaceData;
- /* calculate face normals and add to vertex normals */
- mf = CDDM_get_tessfaces(dm);
- for(i = 0; i < numFaces; i++, mf++) {
- float *f_no = face_nors[i];
+ /*first go through and calculate normals for all the polys*/
+ temp_nors = MEM_callocN(sizeof(float)*3*dm->numPolyData, "temp_nors cdderivedmesh.c");
+ vert_nors = MEM_callocN(sizeof(float)*3*dm->numVertData, "vert_nors cdderivedmesh.c");
+
+ mp = cddm->mpoly;
+ for (i=0; i<dm->numPolyData; i++, mp++) {
+ mesh_calc_poly_normal(mp, cddm->mloop+mp->loopstart, cddm->mvert, temp_nors[i]);
- if(mf->v4)
- CalcNormFloat4(mv[mf->v1].co, mv[mf->v2].co,
- mv[mf->v3].co, mv[mf->v4].co, f_no);
- else
- CalcNormFloat(mv[mf->v1].co, mv[mf->v2].co,
- mv[mf->v3].co, f_no);
-
- VecAddf(temp_nors[mf->v1], temp_nors[mf->v1], f_no);
- VecAddf(temp_nors[mf->v2], temp_nors[mf->v2], f_no);
- VecAddf(temp_nors[mf->v3], temp_nors[mf->v3], f_no);
- if(mf->v4)
- VecAddf(temp_nors[mf->v4], temp_nors[mf->v4], f_no);
+ ml = cddm->mloop + mp->loopstart;
+ for (j=0; j<mp->totloop; j++, ml++) {
+ VECADD(vert_nors[ml->v], vert_nors[ml->v], temp_nors[i]);
+ }
}
- /* normalize vertex normals and assign */
- for(i = 0; i < numVerts; i++, mv++) {
- float *no = temp_nors[i];
+ face_nors = MEM_callocN(sizeof(float)*3*dm->numFaceData, "face_nors cdderivedmesh.c");
+ CustomData_add_layer(&dm->faceData, CD_NORMAL, CD_ASSIGN, face_nors, dm->numFaceData);
+ origIndex = CustomData_get_layer(&dm->faceData, CD_ORIGINDEX);
+
+ mf = cddm->mface;
+ for (i=0; i<dm->numFaceData; i++, mf++, origIndex++) {
+ VECCOPY(face_nors[i], temp_nors[*origIndex]);
+ }
+
+ mv = cddm->mvert;
+ for (i=0; i<dm->numVertData; i++, mv++) {
+ float *no = vert_nors[i];
if (Normalize(no) == 0.0) {
VECCOPY(no, mv->co);
- Normalize(no);
+ if (Normalize(no) == 0.0) {
+ no[0] = 0.0f;
+ no[1] = 0.0f;
+ no[2] = 1.0f;
+ }
}
- mv->no[0] = (short)(no[0] * 32767.0);
- mv->no[1] = (short)(no[1] * 32767.0);
- mv->no[2] = (short)(no[2] * 32767.0);
+ mv->no[0] = (short)(no[0] * 32767.0f);
+ mv->no[1] = (short)(no[1] * 32767.0f);
+ mv->no[2] = (short)(no[2] * 32767.0f);
}
-
+
MEM_freeN(temp_nors);
+ MEM_freeN(vert_nors);
}
void CDDM_calc_edges(DerivedMesh *dm)
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c 2009-11-02 00:30:52 UTC (rev 24226)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c 2009-11-02 06:31:23 UTC (rev 24227)
@@ -840,7 +840,6 @@
memset(co, 0, sizeof(float)*3);
- sub_weight = sub_weights;
for(i = 0; i < count; ++i) {
float weight = weights ? weights[i] : 1.0f;
@@ -896,7 +895,7 @@
{sizeof(MCol)*4, "MCol", 4, "TextureCol", NULL, NULL, layerInterp_mcol,
layerSwap_mcol, layerDefault_mcol},
{sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
- {sizeof(float), "", 3, "ShapeKey", layerInterp_shapekey},
+ {sizeof(float)*3, "", 0, "ShapeKey", NULL, NULL, layerInterp_shapekey},
};
const char *LAYERTYPENAMES[CD_NUMTYPES] = {
@@ -904,7 +903,7 @@
"CDMCol", "CDOrigIndex", "CDNormal", "CDFlags","CDMFloatProperty",
"CDMIntProperty","CDMStringProperty", "CDOrigSpace", "CDOrco", "CDMTexPoly", "CDMLoopUV",
"CDMloopCol", "CDTangent", "CDMDisps", "CDWeightMCol", "CDMPoly",
- "CDMLoop", "CDMLoopCol", "CDIDCol", "CDTextureCol", "CDShapeKeyIndex"};
+ "CDMLoop", "CDMLoopCol", "CDIDCol", "CDTextureCol", "CDShapeKeyIndex", "CDShapeKey"};
const CustomDataMask CD_MASK_BAREMESH =
CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MFACE | CD_MASK_MLOOP | CD_MASK_MPOLY;
@@ -913,7 +912,7 @@
CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE | CD_MASK_MCOL |
CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS |
CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MPOLY | CD_MASK_MLOOP |
- CD_MASK_MTEXPOLY;
+ CD_MASK_MTEXPOLY | CD_MASK_NORMAL;
const CustomDataMask CD_MASK_EDITMESH =
CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE | CD_MASK_MLOOPUV |
CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_SHAPE_KEYINDEX |
@@ -923,7 +922,8 @@
CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE |
CD_MASK_MCOL | CD_MASK_ORIGINDEX | CD_MASK_PROP_FLT | CD_MASK_PROP_INT |
CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_WEIGHT_MLOOPCOL |
- CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORCO | CD_MASK_TANGENT | CD_MASK_WEIGHT_MCOL;
+ CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORCO | CD_MASK_TANGENT |
+ CD_MASK_WEIGHT_MCOL | CD_MASK_NORMAL;
const CustomDataMask CD_MASK_BMESH = CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY |
CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_PROP_FLT | CD_MASK_PROP_INT |
CD_MASK_PROP_STR | CD_MASK_SHAPEKEY | CD_MASK_SHAPE_KEYINDEX;
@@ -1075,6 +1075,17 @@
return -1;
}
+int CustomData_get_layer_index_n(const struct CustomData *data, int type, int n)
+{
+ int i;
+
+ for(i=0; i < data->totlayer; ++i)
+ if(data->layers[i].type == type)
+ return i + n;
+
+ return -1;
+}
+
int CustomData_get_named_layer_index(const CustomData *data, int type, char *name)
{
int i;
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/key.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/key.c 2009-11-02 00:30:52 UTC (rev 24226)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/key.c 2009-11-02 06:31:23 UTC (rev 24227)
@@ -118,6 +118,8 @@
key->type= KEY_NORMAL;
key->from= id;
+
+ key->uidgen = 1;
// XXX the code here uses some defines which will soon be depreceated...
if( GS(id->name)==ID_ME) {
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/node.c 2009-11-02 00:30:52 UTC (rev 24226)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/node.c 2009-11-02 06:31:23 UTC (rev 24227)
@@ -1927,1248 +1927,4 @@
bNode *node;
bNodeSocket *sock;
- for(node= ntree->nodes.first; node; node= node->next) {
-
- /* initialize needed for groups */
- node->exec= 0;
-
- if(is_group==0) {
- for(sock= node->outputs.first; sock; sock= sock->next) {
- bNodeStack *ns= ntree->stack + sock->stack_index;
-
- if(sock->ns.data) {
- ns->data= sock->ns.data;
- sock->ns.data= NULL;
- }
- }
- }
- /* cannot initialize them while using in threads */
- if(ELEM3(node->type, CMP_NODE_TIME, CMP_NODE_CURVE_VEC, CMP_NODE_CURVE_RGB)) {
- curvemapping_initialize(node->storage);
- if(node->type==CMP_NODE_CURVE_RGB)
- curvemapping_premultiply(node->storage, 0);
- }
- if(node->type==NODE_GROUP)
- composit_begin_exec((bNodeTree *)node->id, 1);
-
- }
-}
-
-/* copy stack compbufs to sockets */
-static void composit_end_exec(bNodeTree *ntree, int is_group)
-{
- extern void print_compbuf(char *str, struct CompBuf *cbuf);
- bNode *node;
- bNodeStack *ns;
- int a;
-
- for(node= ntree->nodes.first; node; node= node->next) {
- if(is_group==0) {
- bNodeSocket *sock;
-
- for(sock= node->outputs.first; sock; sock= sock->next) {
- ns= ntree->stack + sock->stack_index;
- if(ns->data) {
- sock->ns.data= ns->data;
- ns->data= NULL;
- }
- }
- }
- if(node->type==CMP_NODE_CURVE_RGB)
- curvemapping_premultiply(node->storage, 1);
-
- if(node->type==NODE_GROUP)
- composit_end_exec((bNodeTree *)node->id, 1);
-
- node->need_exec= 0;
- }
-
- if(is_group==0) {
- /* internally, group buffers are not stored */
- for(ns= ntree->stack, a=0; a<ntree->stacksize; a++, ns++) {
- if(ns->data) {
- printf("freed leftover buffer from stack\n");
- free_compbuf(ns->data);
- ns->data= NULL;
- }
- }
- }
-}
-
-static void group_tag_used_outputs(bNode *gnode, bNodeStack *stack)
-{
- bNodeTree *ntree= (bNodeTree *)gnode->id;
- bNode *node;
-
- stack+= gnode->stack_index;
-
- for(node= ntree->nodes.first; node; node= node->next) {
- if(node->typeinfo->execfunc) {
- bNodeSocket *sock;
-
- for(sock= node->inputs.first; sock; sock= sock->next) {
- if(sock->intern) {
- if(sock->link) {
- bNodeStack *ns= stack + sock->link->fromsock->stack_index;
- ns->hasoutput= 1;
- ns->sockettype= sock->link->fromsock->type;
- }
- else
- sock->ns.sockettype= sock->type;
- }
- }
- }
- }
-}
-
-/* notes below are ancient! (ton) */
-/* stack indices make sure all nodes only write in allocated data, for making it thread safe */
-/* only root tree gets the stack, to enable instances to have own stack entries */
-/* per tree (and per group) unique indices are created */
-/* the index_ext we need to be able to map from groups to the group-node own stack */
-
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list