[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