[Bf-blender-cvs] [661f30df512] temp-gpencil-eval: Minimum process working but very slow
Antonio Vazquez
noreply at git.blender.org
Mon Jan 13 11:24:22 CET 2020
Commit: 661f30df512664be135ee1a5cd62a16fcb248946
Author: Antonio Vazquez
Date: Sat Jan 11 19:26:33 2020 +0100
Branches: temp-gpencil-eval
https://developer.blender.org/rB661f30df512664be135ee1a5cd62a16fcb248946
Minimum process working but very slow
===================================================================
M source/blender/blenkernel/BKE_gpencil.h
M source/blender/blenkernel/intern/gpencil.c
M source/blender/blenkernel/intern/object.c
M source/blender/blenkernel/intern/object_update.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 337138d37c8..7e9e01cc297 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -88,6 +88,7 @@ void BKE_gpencil_free_frames(struct bGPDlayer *gpl);
void BKE_gpencil_free_layers(struct ListBase *list);
bool BKE_gpencil_free_frame_runtime_data(struct bGPDframe *gpf_eval);
void BKE_gpencil_free(struct bGPdata *gpd, bool free_all);
+void BKE_gpencil_eval_delete(struct bGPdata *gpd_eval);
void BKE_gpencil_batch_cache_dirty_tag(struct bGPdata *gpd);
void BKE_gpencil_batch_cache_free(struct bGPdata *gpd);
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index d8003952dba..0d3f98c7b55 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -236,6 +236,13 @@ void BKE_gpencil_free(bGPdata *gpd, bool free_all)
}
}
+void BKE_gpencil_eval_delete(bGPdata *gpd_eval)
+{
+ BKE_gpencil_free(gpd_eval, true);
+ BKE_libblock_free_data(&gpd_eval->id, false);
+ MEM_freeN(gpd_eval);
+}
+
/* ************************************************** */
/* Container Creation */
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 8fd08dd385d..c653bdd36c9 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -453,7 +453,10 @@ void BKE_object_free_derived_caches(Object *ob)
BKE_object_to_mesh_clear(ob);
BKE_object_free_curve_cache(ob);
- /* clear grease pencil data */
+ /* Clear grease pencil data. */
+ if (ob->runtime.gpd_eval != NULL) {
+ BKE_gpencil_eval_delete(ob->runtime.gpd_eval);
+ }
DRW_gpencil_freecache(ob);
}
diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c
index 75ee3ea2df6..dd59ac52a2c 100644
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@ -157,7 +157,6 @@ static void assign_object_gpencil_eval(Object *object)
{
BLI_assert(object->id.tag & LIB_TAG_COPIED_ON_WRITE);
- bGPdata *gpd = (bGPdata *)object->data;
bGPdata *gpd_eval = object->runtime.gpd_eval;
gpd_eval->id.tag |= LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT;
@@ -170,13 +169,6 @@ static void assign_object_gpencil_eval(Object *object)
void BKE_object_handle_data_update(Depsgraph *depsgraph, Scene *scene, Object *ob)
{
DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob);
- Object *ob_orig = DEG_get_original_object(ob);
- printf("%s\tOb Orig:%p Ob Eval:%p Orig_Data:%p Eval Data:%p \n",
- ob->id.name + 2,
- ob_orig,
- ob,
- ob_orig->data,
- ob->data);
/* includes all keys and modifiers */
switch (ob->type) {
@@ -236,11 +228,18 @@ void BKE_object_handle_data_update(Depsgraph *depsgraph, Scene *scene, Object *o
BKE_lattice_modifiers_calc(depsgraph, scene, ob);
break;
case OB_GPENCIL: {
+ bGPdata *gpd = (bGPdata *)ob->data;
+
+ if (ob->runtime.gpd_orig == NULL) {
+ ob->runtime.gpd_orig = gpd;
+ }
+
/* Copy Datablock to evaluated version. */
- if (ob->runtime.gpd_eval) {
- BKE_gpencil_free(ob->runtime.gpd_eval, true);
+ if (ob->runtime.gpd_eval != NULL) {
+ BKE_gpencil_eval_delete(ob->runtime.gpd_eval);
+ ob->data = ob->runtime.gpd_orig;
}
- ob->runtime.gpd_orig = (bGPdata *)ob->data;
+
ob->runtime.gpd_eval = BKE_gpencil_copy_for_eval(ob->runtime.gpd_orig, true);
assign_object_gpencil_eval(ob);
More information about the Bf-blender-cvs
mailing list