[Bf-blender-cvs] [88cfd1a] soc-2013-depsgraph_mt: Pass evaluation context to BKE_scene_base_iter_next

Sergey Sharybin noreply at git.blender.org
Wed Dec 11 11:28:29 CET 2013


Commit: 88cfd1a815df8ff2f973acdc56ddd55dadeafb9e
Author: Sergey Sharybin
Date:   Tue Dec 10 17:53:20 2013 +0600
http://developer.blender.org/rB88cfd1a815df8ff2f973acdc56ddd55dadeafb9e

Pass evaluation context to BKE_scene_base_iter_next

This is needed to make dupilist being created with
proper render settings when counting mballs.

Without this change enabling particles for rendering
and disabling them for viewport would lead to situation
when mball used as dupliobject for this particle system
is never visible.

Also removed hardcoded evaluation context from some
RNA callbacks.

TODO: Cycles will use viewport render settings for
      mballs, don't ask why. It is to be solved.

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

M	source/blender/blenkernel/BKE_displist.h
M	source/blender/blenkernel/BKE_mball.h
M	source/blender/blenkernel/BKE_scene.h
M	source/blender/blenkernel/intern/displist.c
M	source/blender/blenkernel/intern/mball.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/editors/object/object_add.c
M	source/blender/editors/object/object_modifier.c
M	source/blender/editors/space_view3d/drawobject.c
M	source/blender/makesrna/intern/rna_main_api.c
M	source/blender/makesrna/intern/rna_scene_api.c
M	source/blender/render/intern/source/convertblender.c

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

diff --git a/source/blender/blenkernel/BKE_displist.h b/source/blender/blenkernel/BKE_displist.h
index 2178f86..3fdf72f 100644
--- a/source/blender/blenkernel/BKE_displist.h
+++ b/source/blender/blenkernel/BKE_displist.h
@@ -62,6 +62,7 @@ struct Material;
 struct Bone;
 struct Mesh;
 struct DerivedMesh;
+struct EvaluationContext;
 
 /* used for curves, nurbs, mball, importing */
 typedef struct DispList {
@@ -91,8 +92,8 @@ void BKE_displist_make_surf(struct Scene *scene, struct Object *ob, struct ListB
 void BKE_displist_make_curveTypes(struct Scene *scene, struct Object *ob, int forOrco);
 void BKE_displist_make_curveTypes_forRender(struct Scene *scene, struct Object *ob, struct ListBase *dispbase, struct DerivedMesh **derivedFinal, int forOrco, int renderResolution);
 void BKE_displist_make_curveTypes_forOrco(struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
-void BKE_displist_make_mball(struct Scene *scene, struct Object *ob);
-void BKE_displist_make_mball_forRender(struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
+void BKE_displist_make_mball(struct EvaluationContext *evaluation_context, struct Scene *scene, struct Object *ob);
+void BKE_displist_make_mball_forRender(struct EvaluationContext *evaluation_context, struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
 
 bool BKE_displist_surfindex_get(DispList *dl, int a, int *b, int *p1, int *p2, int *p3, int *p4);
 void BKE_displist_fill(struct ListBase *dispbase, struct ListBase *to, const float normal_proj[3], const bool flipnormal);
diff --git a/source/blender/blenkernel/BKE_mball.h b/source/blender/blenkernel/BKE_mball.h
index 7665e1b..21e9910 100644
--- a/source/blender/blenkernel/BKE_mball.h
+++ b/source/blender/blenkernel/BKE_mball.h
@@ -32,6 +32,7 @@
  *  \since March 2001
  *  \author nzc
  */
+struct EvaluationContext;
 struct Main;
 struct MetaBall;
 struct Object;
@@ -47,7 +48,7 @@ void BKE_mball_make_local(struct MetaBall *mb);
 
 void BKE_mball_cubeTable_free(void);
 
-void BKE_mball_polygonize(struct Scene *scene, struct Object *ob, struct ListBase *dispbase, bool for_render);
+void BKE_mball_polygonize(struct EvaluationContext *evaluation_context, struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
 bool BKE_mball_is_basis_for(struct Object *ob1, struct Object *ob2);
 bool BKE_mball_is_basis(struct Object *ob);
 struct Object *BKE_mball_basis_find(struct Scene *scene, struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 191fd6f..47f3de6 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -86,7 +86,8 @@ typedef struct SceneBaseIter {
 	int fase;
 } SceneBaseIter;
 
-int          BKE_scene_base_iter_next(struct SceneBaseIter *iter, struct Scene **scene, int val, struct Base **base, struct Object **ob);
+int BKE_scene_base_iter_next(struct EvaluationContext *evaluation_context, struct SceneBaseIter *iter,
+                             struct Scene **scene, int val, struct Base **base, struct Object **ob);
 
 void BKE_scene_base_flag_to_objects(struct Scene *scene);
 void BKE_scene_base_flag_from_objects(struct Scene *scene);
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index dd1df6e..03db67c 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -49,9 +49,11 @@
 #include "BLI_utildefines.h"
 
 #include "BKE_global.h"
+#include "BKE_depsgraph.h"
 #include "BKE_displist.h"
 #include "BKE_cdderivedmesh.h"
 #include "BKE_object.h"
+#include "BKE_main.h"
 #include "BKE_mball.h"
 #include "BKE_material.h"
 #include "BKE_curve.h"
@@ -709,7 +711,7 @@ float BKE_displist_calc_taper(Scene *scene, Object *taperobj, int cur, int tot)
 	return displist_calc_taper(scene, taperobj, fac);
 }
 
-void BKE_displist_make_mball(Scene *scene, Object *ob)
+void BKE_displist_make_mball(EvaluationContext *evaluation_context, Scene *scene, Object *ob)
 {
 	if (!ob || ob->type != OB_MBALL)
 		return;
@@ -723,7 +725,7 @@ void BKE_displist_make_mball(Scene *scene, Object *ob)
 
 	if (ob->type == OB_MBALL) {
 		if (ob == BKE_mball_basis_find(scene, ob)) {
-			BKE_mball_polygonize(scene, ob, &ob->curve_cache->disp, false);
+			BKE_mball_polygonize(evaluation_context, scene, ob, &ob->curve_cache->disp);
 			BKE_mball_texspace_calc(ob);
 
 			object_deform_mball(ob, &ob->curve_cache->disp);
@@ -733,9 +735,9 @@ void BKE_displist_make_mball(Scene *scene, Object *ob)
 	}
 }
 
-void BKE_displist_make_mball_forRender(Scene *scene, Object *ob, ListBase *dispbase)
+void BKE_displist_make_mball_forRender(EvaluationContext *evaluation_context, Scene *scene, Object *ob, ListBase *dispbase)
 {
-	BKE_mball_polygonize(scene, ob, dispbase, true);
+	BKE_mball_polygonize(evaluation_context, scene, ob, dispbase);
 	BKE_mball_texspace_calc(ob);
 
 	object_deform_mball(ob, dispbase);
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index 1128c3e..008e364 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -57,6 +57,7 @@
 /*  #include "BKE_object.h" */
 #include "BKE_animsys.h"
 #include "BKE_curve.h"
+#include "BKE_depsgraph.h"
 #include "BKE_scene.h"
 #include "BKE_library.h"
 #include "BKE_displist.h"
@@ -485,14 +486,15 @@ void BKE_mball_properties_copy(Scene *scene, Object *active_object)
 	int basisnr, obnr;
 	char basisname[MAX_ID_NAME], obname[MAX_ID_NAME];
 	SceneBaseIter iter;
+	EvaluationContext *evaluation_context = G.main->evaluation_context;
 
 	BLI_split_name_num(basisname, &basisnr, active_object->id.name + 2, '.');
 
 	/* XXX recursion check, see scene.c, just too simple code this BKE_scene_base_iter_next() */
-	if (F_ERROR == BKE_scene_base_iter_next(&iter, &sce_iter, 0, NULL, NULL))
+	if (F_ERROR == BKE_scene_base_iter_next(evaluation_context, &iter, &sce_iter, 0, NULL, NULL))
 		return;
 	
-	while (BKE_scene_base_iter_next(&iter, &sce_iter, 1, &base, &ob)) {
+	while (BKE_scene_base_iter_next(evaluation_context, &iter, &sce_iter, 1, &base, &ob)) {
 		if (ob->type == OB_MBALL) {
 			if (ob != active_object) {
 				BLI_split_name_num(obname, &obnr, ob->id.name + 2, '.');
@@ -530,14 +532,15 @@ Object *BKE_mball_basis_find(Scene *scene, Object *basis)
 	int basisnr, obnr;
 	char basisname[MAX_ID_NAME], obname[MAX_ID_NAME];
 	SceneBaseIter iter;
+	EvaluationContext *evaluation_context = G.main->evaluation_context;
 
 	BLI_split_name_num(basisname, &basisnr, basis->id.name + 2, '.');
 
 	/* XXX recursion check, see scene.c, just too simple code this BKE_scene_base_iter_next() */
-	if (F_ERROR == BKE_scene_base_iter_next(&iter, &sce_iter, 0, NULL, NULL))
+	if (F_ERROR == BKE_scene_base_iter_next(evaluation_context, &iter, &sce_iter, 0, NULL, NULL))
 		return NULL;
 
-	while (BKE_scene_base_iter_next(&iter, &sce_iter, 1, &base, &ob)) {
+	while (BKE_scene_base_iter_next(evaluation_context, &iter, &sce_iter, 1, &base, &ob)) {
 		if (ob->type == OB_MBALL) {
 			if (ob != bob) {
 				BLI_split_name_num(obname, &obnr, ob->id.name + 2, '.');
@@ -1637,7 +1640,7 @@ static void polygonize(PROCESS *process, MetaBall *mb)
 	}
 }
 
-static float init_meta(PROCESS *process, Scene *scene, Object *ob)    /* return totsize */
+static float init_meta(EvaluationContext *evaluation_context, PROCESS *process, Scene *scene, Object *ob)    /* return totsize */
 {
 	Scene *sce_iter = scene;
 	Base *base;
@@ -1657,8 +1660,8 @@ static float init_meta(PROCESS *process, Scene *scene, Object *ob)    /* return
 	BLI_split_name_num(obname, &obnr, ob->id.name + 2, '.');
 	
 	/* make main array */
-	BKE_scene_base_iter_next(&iter, &sce_iter, 0, NULL, NULL);
-	while (BKE_scene_base_iter_next(&iter, &sce_iter, 1, &base, &bob)) {
+	BKE_scene_base_iter_next(evaluation_context, &iter, &sce_iter, 0, NULL, NULL);
+	while (BKE_scene_base_iter_next(evaluation_context, &iter, &sce_iter, 1, &base, &bob)) {
 
 		if (bob->type == OB_MBALL) {
 			zero_size = 0;
@@ -2211,7 +2214,7 @@ static void init_metaball_octal_tree(PROCESS *process, int depth)
 	subdivide_metaball_octal_node(node, size[0], size[1], size[2], process->metaball_tree->depth);
 }
 
-static void mball_count(PROCESS *process, Scene *scene, Object *basis)
+static void mball_count(EvaluationContext *evaluation_context, PROCESS *process, Scene *scene, Object *basis)
 {
 	Scene *sce_iter = scene;
 	Base *base;
@@ -2225,10 +2228,10 @@ static void mball_count(PROCESS *process, Scene *scene, Object *basis)
 	process->totelem = 0;
 
 	/* XXX recursion check, see scene.c, just too simple code this BKE_scene_base_iter_next() */
-	if (F_ERROR == BKE_scene_base_iter_next(&iter, &sce_iter, 0, NULL, NULL))
+	if (F_ERROR == BKE_scene_base_iter_next(evaluation_context, &iter, &sce_iter, 0, NULL, NULL))
 		return;
 
-	while (BKE_scene_base_iter_next(&iter, &sce_iter, 1, &base, &ob)) {
+	while (BKE_scene_base_iter_next(evaluation_context, &iter, &sce_iter, 1, &base, &ob)) {
 		if (ob->type == OB_MBALL) {
 			if (ob == bob) {
 				MetaBall *mb = ob->data;
@@ -2264,7 +2267,7 @@ static void mball_count(PROCESS *process, Scene *scene, Object *basis)
 	}
 }
 
-void BKE_mball_polygonize(Scene *scene, Object *ob, ListBase *dispbase, bool for_render)
+void BKE_mball_polygonize(EvaluationContext *evaluation_context, Scene *scene, Object *ob, ListBase *dispbase)
 {
 	MetaBall *mb;
 	DispList *dl;
@@ -2274,10 +2277,10 @@ void BKE_mball_polygonize(Scene *scene, Object *ob, ListBase *dispbase, bool for
 
 	mb = ob->data;
 
-	mball_count(&process, scene, ob);
+	mball_count(evaluation_context, &process, scene, ob);
 
 	if (process.totelem == 0) return;
-	if ((for_render == false) && (mb->flag == MB_UPDATE_NEVER)) return;
+	if ((evaluation_context->for_render == false) && (mb->flag == MB_UPDATE_NEVER)) return;
 	if ((G.moving & (G_TRANSFORM_OBJ | G_TRANSFORM_EDIT)) && mb->flag == MB_UPDATE_FAST) return;
 
 	process.thresh = mb->thresh;
@@ -2286,7 +2289,7 @@ void BKE_mball_polygonize(Scene *scene, Object *ob, ListBase *dispbase, bool for
 	process.mainb = MEM_mallocN(sizeof(void *) * process.totelem, "mainb");
 	
 	/* initialize all mainb (MetaElems) */


@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list