[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13704] trunk/blender/source/blender/ render/intern:
Brecht Van Lommel
brechtvanlommel at pandora.be
Fri Feb 15 16:29:45 CET 2008
Revision: 13704
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13704
Author: blendix
Date: 2008-02-15 16:29:43 +0100 (Fri, 15 Feb 2008)
Log Message:
-----------
Bugfix for unnecessary missing object warnings for speed vectors,
caused by optimization that doesn't compute vectors for objects that
don't need them.
Modified Paths:
--------------
trunk/blender/source/blender/render/intern/include/render_types.h
trunk/blender/source/blender/render/intern/source/convertblender.c
trunk/blender/source/blender/render/intern/source/occlusion.c
Modified: trunk/blender/source/blender/render/intern/include/render_types.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/render_types.h 2008-02-15 15:20:50 UTC (rev 13703)
+++ trunk/blender/source/blender/render/intern/include/render_types.h 2008-02-15 15:29:43 UTC (rev 13704)
@@ -517,6 +517,7 @@
#define R_DUPLI_TRANSFORMED 1
#define R_ENV_TRANSFORMED 2
#define R_TRANSFORMED (1|2)
+#define R_NEED_VECTORS 4
#endif /* RENDER_TYPES_H */
Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c 2008-02-15 15:20:50 UTC (rev 13703)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c 2008-02-15 15:29:43 UTC (rev 13704)
@@ -4051,7 +4051,7 @@
re->totstrand += obr->totstrand;
}
-static void add_render_object(Render *re, Object *ob, Object *par, int index, int timeoffset, int instanceable)
+static void add_render_object(Render *re, Object *ob, Object *par, int index, int timeoffset, int instanceable, int vectorlay)
{
ObjectRen *obr;
ParticleSystem *psys;
@@ -4078,6 +4078,8 @@
obr->flag |= R_INSTANCEABLE;
Mat4CpyMat4(obr->obmat, ob->obmat);
}
+ if(obr->lay & vectorlay)
+ obr->flag |= R_NEED_VECTORS;
init_render_object_data(re, obr, timeoffset);
/* only add instance for objects that have not been used for dupli */
@@ -4096,6 +4098,8 @@
obr->flag |= R_INSTANCEABLE;
Mat4CpyMat4(obr->obmat, ob->obmat);
}
+ if(obr->lay & vectorlay)
+ obr->flag |= R_NEED_VECTORS;
init_render_object_data(re, obr, timeoffset);
psys_render_restore(ob, psys);
@@ -4110,7 +4114,7 @@
/* par = pointer to duplicator parent, needed for object lookup table */
/* index = when duplicater copies same object (particle), the counter */
-static void init_render_object(Render *re, Object *ob, Object *par, int index, int timeoffset, int instanceable)
+static void init_render_object(Render *re, Object *ob, Object *par, int index, int timeoffset, int instanceable, int vectorlay)
{
static double lasttime= 0.0;
double time;
@@ -4119,7 +4123,7 @@
if(ob->type==OB_LAMP)
add_render_lamp(re, ob);
else if(render_object_type(ob->type))
- add_render_object(re, ob, par, index, timeoffset, instanceable);
+ add_render_object(re, ob, par, index, timeoffset, instanceable, vectorlay);
else {
MTC_Mat4MulMat4(mat, ob->obmat, re->viewmat);
MTC_Mat4Invert(ob->imat, mat);
@@ -4321,7 +4325,7 @@
ObjectInstanceRen *obi;
Scene *sce;
float mat[4][4];
- int lay;
+ int lay, vectorlay;
for(SETLOOPER(re->scene, base)) {
ob= base->object;
@@ -4336,10 +4340,8 @@
for(SETLOOPER(re->scene, base)) {
ob= base->object;
- if(timeoffset)
- lay= renderlay & get_vector_renderlayers(sce);
- else
- lay= renderlay;
+ vectorlay= get_vector_renderlayers(sce);
+ lay= (timeoffset)? renderlay & vectorlay: renderlay;
/* if the object has been restricted from rendering in the outliner, ignore it */
if(ob->restrictflag & OB_RESTRICT_RENDER) continue;
@@ -4348,7 +4350,7 @@
if(ob->flag & OB_DONE) {
if(ob->transflag & OB_RENDER_DUPLI)
if(allow_render_object(ob, nolamps, onlyselected, actob))
- init_render_object(re, ob, NULL, 0, timeoffset, 1);
+ init_render_object(re, ob, NULL, 0, timeoffset, 1, vectorlay);
}
else if((base->lay & lay) || (ob->type==OB_LAMP && (base->lay & re->scene->lay)) ) {
if((ob->transflag & OB_DUPLI) && (ob->type!=OB_MBALL)) {
@@ -4399,7 +4401,7 @@
}
}
else
- init_render_object(re, obd, ob, dob->index, timeoffset, !dob->animated);
+ init_render_object(re, obd, ob, dob->index, timeoffset, !dob->animated, vectorlay);
psysindex= 1;
for(psys=obd->particlesystem.first; psys; psys=psys->next) {
@@ -4424,17 +4426,17 @@
}
}
else
- init_render_object(re, obd, ob, dob->index, timeoffset, !dob->animated);
+ init_render_object(re, obd, ob, dob->index, timeoffset, !dob->animated, vectorlay);
if(re->test_break()) break;
}
free_object_duplilist(lb);
if(allow_render_object(ob, nolamps, onlyselected, actob))
- init_render_object(re, ob, NULL, 0, timeoffset, 0);
+ init_render_object(re, ob, NULL, 0, timeoffset, 0, vectorlay);
}
else if(allow_render_object(ob, nolamps, onlyselected, actob))
- init_render_object(re, ob, NULL, 0, timeoffset, 0);
+ init_render_object(re, ob, NULL, 0, timeoffset, 0, vectorlay);
}
if(re->test_break()) break;
@@ -4994,9 +4996,12 @@
table= &oldtable;
oldobi= table->first;
- for(obi= re->instancetable.first; obi && oldobi; obi= obi->next, oldobi= oldobi->next) {
+ for(obi= re->instancetable.first; obi && oldobi; obi= obi->next) {
int ok= 1;
+ if(!(obi->obr->flag & R_NEED_VECTORS))
+ continue;
+
obi->totvector= obi->obr->totvert;
/* find matching object in old table */
@@ -5022,13 +5027,13 @@
load_fluidsimspeedvectors(re, obi, oldobi->vectors, step);
} else {
/* check if both have same amounts of vertices */
- if(obi->totvector!=oldobi->totvector) {
+ if(obi->totvector==oldobi->totvector)
+ calculate_speedvectors(re, obi, oldobi->vectors, step);
+ else
printf("Warning: object %s has different amount of vertices or strands on other frame\n", obi->ob->id.name+2);
- continue;
- }
-
- calculate_speedvectors(re, obi, oldobi->vectors, step);
} // not fluidsim
+
+ oldobi= oldobi->next;
}
}
}
Modified: trunk/blender/source/blender/render/intern/source/occlusion.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/occlusion.c 2008-02-15 15:20:50 UTC (rev 13703)
+++ trunk/blender/source/blender/render/intern/source/occlusion.c 2008-02-15 15:29:43 UTC (rev 13704)
@@ -1638,9 +1638,6 @@
onlyshadow= (shi->mat->mode & MA_ONLYSHADOW);
sample_occ_tree(re, tree, &exclude, shi->co, shi->vno, shi->thread, onlyshadow, shi->ao);
- if(G.rt & 32)
- shi->ao[2] *= 2.0f;
-
/* fill result into sample, each time */
if(tree->cache) {
cache= &tree->cache[shi->thread];
More information about the Bf-blender-cvs
mailing list