Commit: 0960d2114af40663869e030e69faa4bba04c0f3a
Author: Sergey Sharybin
Date:   Fri Dec 13 16:17:11 2013 +0600
http://developer.blender.org/rB0960d2114af40663869e030e69faa4bba04c0f3a

Address review from Brecht

* Removed residual of derivedRender code from convertblender.c
* Added check for oldcreen->scene != screen->scene before rebuilding
  the DAG when changing the scene.
* Made blender compilable with smoke disabled.
* Typo fixes.

===================================================================

M       source/blender/blenkernel/intern/smoke.c
M       source/blender/editors/screen/screen_edit.c
M       source/blender/render/intern/source/pipeline.c
M       source/creator/creator.c

===================================================================

diff --git a/source/blender/blenkernel/intern/smoke.c 
b/source/blender/blenkernel/intern/smoke.c
index 80a1a45..56fabb9 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -166,7 +166,7 @@ void smoke_initWaveletBlenderRNA(struct WTURBULENCE 
*UNUSED(wt), float *UNUSED(s
 void smoke_initBlenderRNA(struct FLUID_3D *UNUSED(fluid), float 
*UNUSED(alpha), float *UNUSED(beta), float *UNUSED(dt_factor), float 
*UNUSED(vorticity),
                           int *UNUSED(border_colli), float 
*UNUSED(burning_rate), float *UNUSED(flame_smoke), float 
*UNUSED(flame_smoke_color),
                           float *UNUSED(flame_vorticity), float 
*UNUSED(flame_ignition_temp), float *UNUSED(flame_max_temp)) {}
-struct DerivedMesh *smokeModifier_do(SmokeModifierData *UNUSED(smd), Scene 
*UNUSED(scene), Object *UNUSED(ob), DerivedMesh *UNUSED(dm)) { return NULL; }
+struct DerivedMesh *smokeModifier_do(SmokeModifierData *UNUSED(smd), Scene 
*UNUSED(scene), Object *UNUSED(ob), DerivedMesh *UNUSED(dm), bool 
UNUSED(for_render)) { return NULL; }
 float smoke_get_velocity_at(struct Object *UNUSED(ob), float 
UNUSED(position[3]), float UNUSED(velocity[3])) { return 0.0f; }
 void flame_get_spectrum(unsigned char *UNUSED(spec), int UNUSED(width), float 
UNUSED(t1), float UNUSED(t2)) {}
 
diff --git a/source/blender/editors/screen/screen_edit.c 
b/source/blender/editors/screen/screen_edit.c
index 3ca12f7..7ec037d 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -1505,6 +1505,7 @@ void ED_screen_set(bContext *C, bScreen *sc)
        if (oldscreen != sc) {
                wmTimer *wt = oldscreen->animtimer;
                ScrArea *sa;
+               Scene *oldscene = oldscreen->scene;
 
                /* remove handlers referencing areas in old screen */
                for (sa = oldscreen->areabase.first; sa; sa = sa->next) {
@@ -1542,11 +1543,10 @@ void ED_screen_set(bContext *C, bScreen *sc)
                 * Quite the same happens when setting screen's scene,
                 * so perhaps this is in fact correct thing to do.
                 */
-               /* TODO(sergey): Check whether DAG is actually need to
-                *               be rebuilt.
-                */
-               BKE_scene_set_background(bmain, sc->scene);
-               DAG_on_visible_update(bmain, FALSE);
+               if (oldscene != sc->scene) {
+                       BKE_scene_set_background(bmain, sc->scene);
+                       DAG_on_visible_update(bmain, FALSE);
+               }
        }
 }
 
diff --git a/source/blender/render/intern/source/pipeline.c 
b/source/blender/render/intern/source/pipeline.c
index 91c7eb9..849a6f6 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -1586,19 +1586,6 @@ static bool rlayer_node_uses_alpha(bNodeTree *ntree, 
bNode *node)
        return false;
 }
 
-static bool allow_render_mesh_object(Object *ob)
-{
-       /* override not showing object when duplis are used with particles */
-       if (ob->transflag & OB_DUPLIPARTS) {
-               /* pass */  /* let particle system(s) handle showing vs. not 
showing */
-       }
-       else if ((ob->transflag & OB_DUPLI) && !(ob->transflag & 
OB_DUPLIFRAMES)) {
-               return false;
-       }
-
-       return true;
-}
-
 /* Issue here is that it's possible that object which is used by boolean,
  * array or shrinkwrap modifiers weren't displayed in the viewport before
  * rendering. This leads to situations when apply() of this modifiers
@@ -1613,15 +1600,33 @@ static bool allow_render_mesh_object(Object *ob)
  * properly without hacks from their side.
  *                                                  - sergey -
  */
-#define DEOSGRAPH_WORKAROUND_HACK
+#define DEPSGRAPH_WORKAROUND_HACK
 
-#ifdef DEOSGRAPH_WORKAROUND_HACK
-static void tag_dependend_objects_for_render(Scene *scene)
+static bool allow_render_mesh_object(Object *ob)
+{
+       /* override not showing object when duplis are used with particles */
+       if (ob->transflag & OB_DUPLIPARTS) {
+               /* pass */  /* let particle system(s) handle showing vs. not 
showing */
+       }
+       else if ((ob->transflag & OB_DUPLI) && !(ob->transflag & 
OB_DUPLIFRAMES)) {
+               return false;
+       }
+
+       return true;
+}
+
+#ifdef DEPSGRAPH_WORKAROUND_HACK
+static void tag_dependend_objects_for_render(Scene *scene, int renderlay)
 {
        Scene *sce_iter;
        Base *base;
        for (SETLOOPER(scene, sce_iter, base)) {
                Object *object = base->object;
+
+               if ((base->lay & renderlay) == 0) {
+                       continue;
+               }
+
                if (object->type == OB_MESH) {
                        if (allow_render_mesh_object(object)) {
                                ModifierData *md;
@@ -1667,27 +1672,30 @@ static void tag_scenes_for_render(Render *re)
 {
        bNode *node;
        Scene *sce;
+#ifdef DEPSGRAPH_WORKAROUND_HACK
+       int renderlay = re->lay;
+#endif
        
        for (sce = re->main->scene.first; sce; sce = sce->id.next) {
                sce->id.flag &= ~LIB_DOIT;
-#ifdef DEOSGRAPH_WORKAROUND_HACK
-               tag_dependend_objects_for_render(sce);
+#ifdef DEPSGRAPH_WORKAROUND_HACK
+               tag_dependend_objects_for_render(sce, renderlay);
 #endif
        }
        
 #ifdef WITH_FREESTYLE
        for (sce = re->freestyle_bmain.scene.first; sce; sce = sce->id.next) {
                sce->id.flag &= ~LIB_DOIT;
-#ifdef DEOSGRAPH_WORKAROUND_HACK
-               tag_dependend_objects_for_render(sce);
+#ifdef DEPSGRAPH_WORKAROUND_HACK
+               tag_dependend_objects_for_render(sce, renderlay);
 #endif
        }
 #endif
 
        if (RE_GetCamera(re) && composite_needs_render(re->scene, 1)) {
                re->scene->id.flag |= LIB_DOIT;
-#ifdef DEOSGRAPH_WORKAROUND_HACK
-               tag_dependend_objects_for_render(re->scene);
+#ifdef DEPSGRAPH_WORKAROUND_HACK
+               tag_dependend_objects_for_render(re->scene, renderlay);
 #endif
        }
        
@@ -1717,8 +1725,8 @@ static void tag_scenes_for_render(Render *re)
                                        if ((node->id->flag & LIB_DOIT) == 0) {
                                                node->flag |= NODE_TEST;
                                                node->id->flag |= LIB_DOIT;
-#ifdef DEOSGRAPH_WORKAROUND_HACK
-                                               
tag_dependend_objects_for_render((Scene *) node->id);
+#ifdef DEPSGRAPH_WORKAROUND_HACK
+                                               
tag_dependend_objects_for_render((Scene *) node->id, renderlay);
 #endif
                                        }
                                }
diff --git a/source/creator/creator.c b/source/creator/creator.c
index 7f6c756..2c61dab 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -1258,6 +1258,7 @@ static int load_file(int UNUSED(argc), const char **argv, 
void *data)
                 * pointcache works */
                if (retval != BKE_READ_FILE_FAIL) {
                        wmWindowManager *wm = CTX_wm_manager(C);
+                       Main *bmain = CTX_data_main(C);
 
                        /* special case, 2.4x files */
                        if (wm == NULL && CTX_data_main(C)->wm.first == NULL) {
@@ -1273,8 +1274,8 @@ static int load_file(int UNUSED(argc), const char **argv, 
void *data)
                        G.relbase_valid = 1;
                        if (CTX_wm_manager(C) == NULL) CTX_wm_manager_set(C, 
wm);  /* reset wm */
 
-                       DAG_on_visible_update(CTX_data_main(C), TRUE);
-                       BKE_scene_update_tagged(CTX_data_main(C), 
CTX_data_scene(C));
+                       DAG_on_visible_update(bmain, TRUE);
+                       BKE_scene_update_tagged(bmain->evaluation_context, 
bmain, CTX_data_scene(C));
                }
                else {
                        /* failed to load file, stop processing arguments */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to