[Bf-blender-cvs] [93177bce3e7] hair_guides: Don't do implicit update in the hair export cache constructor.

Lukas Tönne noreply at git.blender.org
Wed May 23 10:04:31 CEST 2018


Commit: 93177bce3e7dd3fd66d29d5f27ed72ef265ab01f
Author: Lukas Tönne
Date:   Tue May 22 09:48:09 2018 +0100
Branches: hair_guides
https://developer.blender.org/rB93177bce3e7dd3fd66d29d5f27ed72ef265ab01f

Don't do implicit update in the hair export cache constructor.

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

M	intern/cycles/blender/blender_curves.cpp
M	intern/cycles/blender/blender_util.h
M	source/blender/blenkernel/BKE_hair.h
M	source/blender/blenkernel/intern/hair.c
M	source/blender/draw/intern/draw_cache_impl_hair.c

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

diff --git a/intern/cycles/blender/blender_curves.cpp b/intern/cycles/blender/blender_curves.cpp
index f547ed7ef1a..8de91892ff1 100644
--- a/intern/cycles/blender/blender_curves.cpp
+++ b/intern/cycles/blender/blender_curves.cpp
@@ -310,7 +310,8 @@ static void ObtainCacheDataFromHairSystem(Mesh *mesh,
 	Transform itfm = transform_quick_inverse(tfm);
 	
 	BL::Mesh b_mesh(b_ob->data());
-	void *hair_cache = BKE_hair_export_cache_new_mesh(b_hsys->ptr.data, 0, b_mesh.ptr.data);
+	void *hair_cache = BKE_hair_export_cache_new();
+	BKE_hair_export_cache_update_mesh(hair_cache, b_hsys->ptr.data, 0, b_mesh.ptr.data, 0xFFFFFFFF);
 	
 	int totcurves, totverts;
 	BKE_hair_render_get_buffer_size(hair_cache, &totcurves, &totverts);
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h
index b5d324309b5..8acbfa4af37 100644
--- a/intern/cycles/blender/blender_util.h
+++ b/intern/cycles/blender/blender_util.h
@@ -36,7 +36,8 @@ void BKE_image_user_frame_calc(void *iuser, int cfra, int fieldnr);
 void BKE_image_user_file_path(void *iuser, void *ima, char *path);
 unsigned char *BKE_image_get_pixels_for_frame(void *image, int frame);
 float *BKE_image_get_float_pixels_for_frame(void *image, int frame);
-void* BKE_hair_export_cache_new_mesh(const void *hsys, int subdiv, void *scalp);
+void* BKE_hair_export_cache_new(void);
+int BKE_hair_export_cache_update_mesh(void *cache, const void *hsys, int subdiv, void *scalp, int data);
 void BKE_hair_export_cache_free(void *hcache);
 void BKE_hair_render_get_buffer_size(void* hcache, int *r_totcurves, int *r_totverts);
 void BKE_hair_render_fill_buffers(void* hcache, int vertco_stride, int *r_curvestart, int *r_curvelen, float *r_vertco);
diff --git a/source/blender/blenkernel/BKE_hair.h b/source/blender/blenkernel/BKE_hair.h
index 4d3f9e189ef..a51c5a6e075 100644
--- a/source/blender/blenkernel/BKE_hair.h
+++ b/source/blender/blenkernel/BKE_hair.h
@@ -166,19 +166,20 @@ typedef enum eHairExportCacheUpdateFlags
 /* Create a new export cache.
  * This can be used to construct full fiber data for rendering.
  */
-struct HairExportCache* BKE_hair_export_cache_new(const struct HairSystem *hsys, int subdiv, struct DerivedMesh *scalp);
+struct HairExportCache* BKE_hair_export_cache_new(void);
 
-/* Create a new export cache.
- * This can be used to construct full fiber data for rendering.
- * XXX Mesh-based version for Cycles export, until DerivedMesh->Mesh conversion is done.
+/* Update an existing export cache when data is invalidated.
+ * Returns flags for data that has been updated.
  */
-struct HairExportCache* BKE_hair_export_cache_new_mesh(const struct HairSystem *hsys, int subdiv, struct Mesh *scalp);
+int BKE_hair_export_cache_update(struct HairExportCache *cache, const struct HairSystem *hsys,
+                                 int subdiv, struct DerivedMesh *scalp, int data);
 
 /* Update an existing export cache when data is invalidated.
  * Returns flags for data that has been updated.
+ * XXX Mesh-based version for Cycles export, until DerivedMesh->Mesh conversion is done.
  */
-int BKE_hair_export_cache_update(const struct HairSystem *hsys, int subdiv, struct DerivedMesh *scalp,
-                                 struct HairExportCache *cache, int data);
+int BKE_hair_export_cache_update_mesh(struct HairExportCache *cache, const struct HairSystem *hsys,
+                                      int subdiv, struct  Mesh *scalp, int data);
 
 /* Free the given export cache */
 void BKE_hair_export_cache_free(struct HairExportCache *cache);
diff --git a/source/blender/blenkernel/intern/hair.c b/source/blender/blenkernel/intern/hair.c
index 999c305e426..f090ecfd5aa 100644
--- a/source/blender/blenkernel/intern/hair.c
+++ b/source/blender/blenkernel/intern/hair.c
@@ -550,33 +550,18 @@ static void hair_guide_calc_vectors(const HairGuideVertex* verts, int numverts,
  * This can be used to construct full fiber data for rendering.
  */
 
-HairExportCache* BKE_hair_export_cache_new(const HairSystem *hsys, int subdiv, DerivedMesh *scalp)
+HairExportCache* BKE_hair_export_cache_new(void)
 {
 	HairExportCache *cache = MEM_callocN(sizeof(HairExportCache), "hair export cache");
-	
-	BKE_hair_export_cache_update(hsys, subdiv, scalp, cache, HAIR_EXPORT_ALL);
-	
-	return cache;
-}
-
-/* Create a new export cache.
- * This can be used to construct full fiber data for rendering.
- * XXX Mesh-based version for Cycles export, until DerivedMesh->Mesh conversion is done.
- */
-
-HairExportCache* BKE_hair_export_cache_new_mesh(const HairSystem *hsys, int subdiv, struct Mesh *scalp)
-{
-	DerivedMesh *dm = CDDM_from_mesh(scalp);
-	HairExportCache *cache = BKE_hair_export_cache_new(hsys, subdiv, dm);
-	dm->release(dm);
 	return cache;
 }
 
 /* Update an existing export cache when data is invalidated.
+ * Returns flags for data that has been updated.
  */
 
-int BKE_hair_export_cache_update(const HairSystem *hsys, int subdiv, DerivedMesh *scalp,
-                                 HairExportCache *cache, int data)
+int BKE_hair_export_cache_update(HairExportCache *cache, const HairSystem *hsys,
+                                 int subdiv, DerivedMesh *scalp, int data)
 {
 	/* Check for missing data */
 	data |= BKE_hair_export_cache_get_required_updates(cache);
@@ -703,6 +688,21 @@ int BKE_hair_export_cache_update(const HairSystem *hsys, int subdiv, DerivedMesh
 	return data;
 }
 
+
+/* Update an existing export cache when data is invalidated.
+ * Returns flags for data that has been updated.
+ * XXX Mesh-based version for Cycles export, until DerivedMesh->Mesh conversion is done.
+ */
+
+int BKE_hair_export_cache_update_mesh(HairExportCache *cache, const HairSystem *hsys,
+                                      int subdiv, struct Mesh *scalp, int data)
+{
+	DerivedMesh *dm = CDDM_from_mesh(scalp);
+	int result = BKE_hair_export_cache_update(cache, hsys, subdiv, dm, data);
+	dm->release(dm);
+	return result;
+}
+
 /* Free the given export cache */
 
 void BKE_hair_export_cache_free(HairExportCache *cache)
diff --git a/source/blender/draw/intern/draw_cache_impl_hair.c b/source/blender/draw/intern/draw_cache_impl_hair.c
index 815db651c81..cc8e9ba0877 100644
--- a/source/blender/draw/intern/draw_cache_impl_hair.c
+++ b/source/blender/draw/intern/draw_cache_impl_hair.c
@@ -306,7 +306,8 @@ Gwn_Batch *DRW_hair_batch_cache_get_fibers(
 
 	TIMEIT_START(DRW_hair_batch_cache_get_fibers);
 
-	HairExportCache *hair_export = BKE_hair_export_cache_new(hsys, subdiv, scalp);
+	HairExportCache *hair_export = BKE_hair_export_cache_new();
+	BKE_hair_export_update(hair_export, hsys, subdiv, scalp, HAIR_EXPORT_ALL);
 
 	if (cache->fibers == NULL) {
 		TIMEIT_BENCH(hair_batch_cache_ensure_fibers(hair_export, cache),



More information about the Bf-blender-cvs mailing list