fixed a case with occlusion where uninitialized variable could be used.

also removed unused vars.

can_pbvh_draw() had a NULL check which is never needed (callers check for this), a NULL ob would have crashed the function anyway.
This commit is contained in:
2011-01-08 10:23:36 +00:00
parent c35db522da
commit d3d5fe42bf
2 changed files with 14 additions and 12 deletions

View File

@@ -190,7 +190,7 @@ static ListBase *cdDM_getFaceMap(Object *ob, DerivedMesh *dm)
static int can_pbvh_draw(Object *ob, DerivedMesh *dm)
{
CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
Mesh *me= (ob)? ob->data: NULL;
Mesh *me= ob->data;
if(ob->sculpt->modifiers_active) return 0;

View File

@@ -305,7 +305,7 @@ static float sh_eval(float *sh, float *v)
/* ------------------------------ Building --------------------------------- */
static void occ_face(const OccFace *face, float *co, float *normal, float *area)
static void occ_face(const OccFace *face, float co[3], float normal[3], float *area)
{
ObjectInstanceRen *obi;
VlakRen *vlr;
@@ -422,21 +422,23 @@ static void occ_node_from_face(OccFace *face, OccNode *node)
sh_from_disc(n, node->area, node->sh);
}
static void occ_build_dco(OcclusionTree *tree, OccNode *node, float *co, float *dco)
static void occ_build_dco(OcclusionTree *tree, OccNode *node, const float co[3], float *dco)
{
OccNode *child;
float dist, d[3], nco[3];
int b;
for(b=0; b<TOTCHILD; b++) {
float dist, d[3], nco[3];
if(node->childflag & (1<<b)) {
occ_face(tree->face+node->child[b].face, nco, 0, 0);
occ_face(tree->face+node->child[b].face, nco, NULL, NULL);
}
else if(node->child[b].node) {
child= node->child[b].node;
OccNode *child= node->child[b].node;
occ_build_dco(tree, child, co, dco);
VECCOPY(nco, child->co);
}
else {
continue;
}
VECSUB(d, nco, co);
dist= INPR(d, d);
@@ -522,7 +524,7 @@ static void occ_build_recursive(OcclusionTree *tree, OccNode *node, int begin, i
ListBase threads;
OcclusionBuildThread othreads[BLENDER_MAX_THREADS];
OccNode *child, tmpnode;
OccFace *face;
/* OccFace *face; */
int a, b, totthread=0, offset[TOTCHILD], count[TOTCHILD];
/* add a new node */
@@ -531,7 +533,7 @@ static void occ_build_recursive(OcclusionTree *tree, OccNode *node, int begin, i
/* leaf node with only children */
if(end - begin <= TOTCHILD) {
for(a=begin, b=0; a<end; a++, b++) {
face= &tree->face[a];
/* face= &tree->face[a]; */
node->child[b].face= a;
node->childflag |= (1<<b);
}
@@ -548,7 +550,7 @@ static void occ_build_recursive(OcclusionTree *tree, OccNode *node, int begin, i
node->child[b].node= NULL;
}
else if(count[b] == 1) {
face= &tree->face[offset[b]];
/* face= &tree->face[offset[b]]; */
node->child[b].face= offset[b];
node->childflag |= (1<<b);
}
@@ -1527,7 +1529,7 @@ static int sample_occ_cache(OcclusionTree *tree, float *co, float *n, int x, int
for(i=0; i<4; i++) {
VECSUB(d, samples[i]->co, co);
dist2= INPR(d, d);
//dist2= INPR(d, d);
wz[i]= 1.0f; //(samples[i]->dist2/(1e-4f + dist2));
wn[i]= pow(INPR(samples[i]->n, n), 32.0f);