[Bf-blender-cvs] [94b0193] master: Make point density sampling functions a bit easier for re-use

Sergey Sharybin noreply at git.blender.org
Sat Mar 28 22:16:07 CET 2015


Commit: 94b01931963a725b9a85a767d9bcaa25c2eb550a
Author: Sergey Sharybin
Date:   Sun Mar 29 02:14:06 2015 +0500
Branches: master
https://developer.blender.org/rB94b01931963a725b9a85a767d9bcaa25c2eb550a

Make point density sampling functions a bit easier for re-use

Still not ideal but getting closer. Main annoying thing so far is
dependency of Render structure for now. It is used to switch particles
to render mode and could probably also be eliminated.

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

M	source/blender/render/intern/include/pointdensity.h
M	source/blender/render/intern/source/pointdensity.c
M	source/blender/render/intern/source/render_texture.c

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

diff --git a/source/blender/render/intern/include/pointdensity.h b/source/blender/render/intern/include/pointdensity.h
index e0c293e..1d1e808 100644
--- a/source/blender/render/intern/include/pointdensity.h
+++ b/source/blender/render/intern/include/pointdensity.h
@@ -37,10 +37,12 @@
  * Make point density kd-trees for all point density textures in the scene
  */
 
+struct PointDensity;
 struct Render;
 struct TexResult;
 
-void cache_pointdensity(struct Render *re, struct Tex *tex);
+void free_pointdensity(struct PointDensity *pd);
+void cache_pointdensity(struct Render *re, struct PointDensity *pd);
 void make_pointdensities(struct Render *re);
 void free_pointdensities(struct Render *re);
 int pointdensitytex(struct Tex *tex, const float texvec[3], struct TexResult *texres);
diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c
index 9cda5aa..320ab07 100644
--- a/source/blender/render/intern/source/pointdensity.c
+++ b/source/blender/render/intern/source/pointdensity.c
@@ -233,13 +233,13 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa
 }
 
 
-static void pointdensity_cache_object(Render *re, PointDensity *pd, Object *ob)
+static void pointdensity_cache_object(Scene *scene, PointDensity *pd, Object *ob)
 {
 	int i;
 	DerivedMesh *dm;
 	MVert *mvert = NULL;
 
-	dm = mesh_create_derived_render(re->scene, ob,	CD_MASK_BAREMESH | CD_MASK_MTFACE | CD_MASK_MCOL);
+	dm = mesh_create_derived_render(scene, ob, CD_MASK_BAREMESH | CD_MASK_MTFACE | CD_MASK_MCOL);
 	mvert = dm->getVertArray(dm);	/* local object space */
 
 	pd->totpoints = dm->getNumVerts(dm);
@@ -274,12 +274,12 @@ static void pointdensity_cache_object(Render *re, PointDensity *pd, Object *ob)
 	dm->release(dm);
 
 }
-void cache_pointdensity(Render *re, Tex *tex)
-{
-	PointDensity *pd = tex->pd;
 
-	if (!pd)
+void cache_pointdensity(Render *re, PointDensity *pd)
+{
+	if (pd == NULL) {
 		return;
+	}
 
 	if (pd->point_tree) {
 		BLI_bvhtree_free(pd->point_tree);
@@ -304,15 +304,15 @@ void cache_pointdensity(Render *re, Tex *tex)
 	else if (pd->source == TEX_PD_OBJECT) {
 		Object *ob = pd->object;
 		if (ob && ob->type == OB_MESH)
-			pointdensity_cache_object(re, pd, ob);
+			pointdensity_cache_object(re->scene, pd, ob);
 	}
 }
 
-static void free_pointdensity(Render *UNUSED(re), Tex *tex)
+void free_pointdensity(PointDensity *pd)
 {
-	PointDensity *pd = tex->pd;
-
-	if (!pd) return;
+	if (pd == NULL) {
+		return;
+	}
 
 	if (pd->point_tree) {
 		BLI_bvhtree_free(pd->point_tree);
@@ -326,8 +326,6 @@ static void free_pointdensity(Render *UNUSED(re), Tex *tex)
 	pd->totpoints = 0;
 }
 
-
-
 void make_pointdensities(Render *re)
 {
 	Tex *tex;
@@ -341,7 +339,7 @@ void make_pointdensities(Render *re)
 
 	for (tex = re->main->tex.first; tex != NULL; tex = tex->id.next) {
 		if (tex->id.us && tex->type == TEX_POINTDENSITY) {
-			cache_pointdensity(re, tex);
+			cache_pointdensity(re, tex->pd);
 		}
 	}
 
@@ -358,7 +356,7 @@ void free_pointdensities(Render *re)
 
 	for (tex = re->main->tex.first; tex != NULL; tex = tex->id.next) {
 		if (tex->id.us && tex->type == TEX_POINTDENSITY) {
-			free_pointdensity(re, tex);
+			free_pointdensity(tex->pd);
 		}
 	}
 }
diff --git a/source/blender/render/intern/source/render_texture.c b/source/blender/render/intern/source/render_texture.c
index df45539..dc8c714 100644
--- a/source/blender/render/intern/source/render_texture.c
+++ b/source/blender/render/intern/source/render_texture.c
@@ -3631,7 +3631,7 @@ Material *RE_init_sample_material(Material *orig_mat, Scene *scene)
 				unit_m4(dummy_re.viewmat);
 				unit_m4(dummy_re.winmat);
 				dummy_re.winx = dummy_re.winy = 128;
-				cache_pointdensity(&dummy_re, tex);
+				cache_pointdensity(&dummy_re, tex->pd);
 			}
 
 			/* update image sequences and movies */




More information about the Bf-blender-cvs mailing list