[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54325] trunk/blender: Fix particle child render resolution access not working outside of the render thread ,

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Feb 5 14:33:54 CET 2013


Revision: 54325
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54325
Author:   blendix
Date:     2013-02-05 13:33:54 +0000 (Tue, 05 Feb 2013)
Log Message:
-----------
Fix particle child render resolution access not working outside of the render thread,
and rename ToggleRender to set_resolution to follow RNA conventions.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_curves.cpp
    trunk/blender/source/blender/blenkernel/intern/particle.c
    trunk/blender/source/blender/makesrna/intern/rna_particle.c

Modified: trunk/blender/intern/cycles/blender/blender_curves.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_curves.cpp	2013-02-05 13:33:24 UTC (rev 54324)
+++ trunk/blender/intern/cycles/blender/blender_curves.cpp	2013-02-05 13:33:54 UTC (rev 54325)
@@ -37,7 +37,6 @@
 void interp_weights(float t, float data[4], int type);
 float shaperadius(float shape, float root, float tip, float time);
 void InterpolateKeySegments(int seg, int segno, int key, int curve, float3 *keyloc, float *time, ParticleCurveData *CData, int interpolation);
-void ToggleRender(Mesh *mesh, BL::Mesh *b_mesh, BL::Object *b_ob, BL::Scene *scene);
 bool ObtainCacheParticleUV(Mesh *mesh, BL::Mesh *b_mesh, BL::Object *b_ob, ParticleCurveData *CData, bool use_parents, bool background, int uv_num);
 bool ObtainCacheParticleVcol(Mesh *mesh, BL::Mesh *b_mesh, BL::Object *b_ob, ParticleCurveData *CData, bool use_parents, bool background, int vcol_num);
 bool ObtainCacheParticleData(Mesh *mesh, BL::Mesh *b_mesh, BL::Object *b_ob, ParticleCurveData *CData, bool use_parents, bool background);
@@ -380,14 +379,14 @@
 
 }
 
-void ToggleRender(Mesh *mesh, BL::Mesh *b_mesh, BL::Object *b_ob, BL::Scene *scene)
+static void set_resolution(Mesh *mesh, BL::Mesh *b_mesh, BL::Object *b_ob, BL::Scene *scene, bool render)
 {
 	BL::Object::modifiers_iterator b_mod;
 	for(b_ob->modifiers.begin(b_mod); b_mod != b_ob->modifiers.end(); ++b_mod) {
 		if ((b_mod->type() == b_mod->type_PARTICLE_SYSTEM) && (b_mod->show_viewport()) && (b_mod->show_render())) {
 			BL::ParticleSystemModifier psmd((const PointerRNA)b_mod->ptr);
 			BL::ParticleSystem b_psys((const PointerRNA)psmd.particle_system().ptr);
-			b_psys.ToggleRender(*scene, *b_ob);
+			b_psys.set_resolution(*scene, *b_ob, (render)? 2: 1);
 		}
 	}
 }
@@ -1017,7 +1016,7 @@
 	ParticleCurveData CData;
 
 	if(!preview)
-		ToggleRender(mesh, &b_mesh, &b_ob, &b_scene);
+		set_resolution(mesh, &b_mesh, &b_ob, &b_scene, true);
 
 	ObtainCacheParticleData(mesh, &b_mesh, &b_ob, &CData, use_parents, !preview);
 
@@ -1166,7 +1165,7 @@
 	}
 
 	if(!preview)
-		ToggleRender(mesh, &b_mesh, &b_ob, &b_scene);
+		set_resolution(mesh, &b_mesh, &b_ob, &b_scene, false);
 
 	mesh->compute_bounds();
 }

Modified: trunk/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle.c	2013-02-05 13:33:24 UTC (rev 54324)
+++ trunk/blender/source/blender/blenkernel/intern/particle.c	2013-02-05 13:33:54 UTC (rev 54325)
@@ -684,8 +684,6 @@
 	ParticleRenderData *data;
 	ParticleSystemModifierData *psmd = psys_get_modifier(ob, psys);
 
-	if (G.is_rendering == FALSE)
-		return;
 	if (psys->renderdata)
 		return;
 
@@ -2384,7 +2382,7 @@
 	int from = PART_FROM_FACE;
 	totparent = (int)(totchild * part->parents * 0.3f);
 
-	if (G.is_rendering && part->child_nbr && part->ren_child_nbr)
+	if ((sim->psys->renderdata || G.is_rendering) && part->child_nbr && part->ren_child_nbr)
 		totparent *= (float)part->child_nbr / (float)part->ren_child_nbr;
 
 	tree = BLI_kdtree_new(totparent);
@@ -2461,7 +2459,7 @@
 	if (totchild && part->childtype == PART_CHILD_FACES) {
 		totparent = (int)(totchild * part->parents * 0.3f);
 		
-		if (G.is_rendering && part->child_nbr && part->ren_child_nbr)
+		if ((psys->renderdata || G.is_rendering) && part->child_nbr && part->ren_child_nbr)
 			totparent *= (float)part->child_nbr / (float)part->ren_child_nbr;
 
 		/* part->parents could still be 0 so we can't test with totparent */

Modified: trunk/blender/source/blender/makesrna/intern/rna_particle.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_particle.c	2013-02-05 13:33:24 UTC (rev 54324)
+++ trunk/blender/source/blender/makesrna/intern/rna_particle.c	2013-02-05 13:33:54 UTC (rev 54325)
@@ -583,20 +583,22 @@
 	}
 }
 
-static void rna_ParticleSystem_ToggleRender(ParticleSystem *particlesystem, Scene *scene, Object *object)
+static void rna_ParticleSystem_set_resolution(ParticleSystem *particlesystem, Scene *scene, Object *object, int resolution)
 {
-	ParticleSystemModifierData *psmd = psys_get_modifier(object, particlesystem);
-	float mat[4][4];
+	if (resolution == eModifierMode_Render) {
+		ParticleSystemModifierData *psmd = psys_get_modifier(object, particlesystem);
+		float mat[4][4];
 
-	unit_m4(mat);
-	
-	if (particlesystem->renderdata)
-		psys_render_restore(object, particlesystem);
-	else {
+		unit_m4(mat);
+
 		psys_render_set(object, particlesystem, mat, mat, 1, 1, 0.f);
 		psmd->flag &= ~eParticleSystemFlag_psys_updated;
 		particle_system_update(scene, object, particlesystem);
 	}
+	else {
+		if (particlesystem->renderdata)
+			psys_render_restore(object, particlesystem);
+	}
 }
 
 static void particle_recalc(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr, short flag)
@@ -3082,6 +3084,12 @@
 	PropertyRNA *prop;
 	FunctionRNA *func;
 
+	static EnumPropertyItem resolution_items[] = {
+		{eModifierMode_Realtime, "PREVIEW", 0, "Preview", "Apply modifier preview settings"},
+		{eModifierMode_Render, "RENDER", 0, "Render", "Apply modifier render settings"},
+		{0, NULL, 0, NULL, NULL}
+	};
+
 	srna = RNA_def_struct(brna, "ParticleSystem", NULL);
 	RNA_def_struct_ui_text(srna, "Particle System", "Particle system in an object");
 	RNA_def_struct_ui_icon(srna, ICON_PARTICLE_DATA);
@@ -3380,11 +3388,12 @@
 
 	RNA_def_struct_path_func(srna, "rna_ParticleSystem_path");
 
-	/* Toggle Render settings */
-	func = RNA_def_function(srna, "ToggleRender", "rna_ParticleSystem_ToggleRender");
-	RNA_def_function_ui_description(func, "Toggle render settings");
+	/* set viewport or render resolution */
+	func = RNA_def_function(srna, "set_resolution", "rna_ParticleSystem_set_resolution");
+	RNA_def_function_ui_description(func, "Set the resolution to use for the number of particles");
 	prop = RNA_def_pointer(func, "scene", "Scene", "", "Scene");
 	prop = RNA_def_pointer(func, "object", "Object", "", "Object");
+	prop = RNA_def_enum(func, "resolution", resolution_items, 0, "", "Resolution settings to apply");
 
 	/* extract cached hair location data */
 	func = RNA_def_function(srna, "co_hair", "rna_ParticleSystem_co_hair");




More information about the Bf-blender-cvs mailing list