Commit: 04e439513b8ab8f967a5fbb7a223ccf469eba547
Author: Joshua Leung
Date:   Sun Oct 29 03:53:44 2017 +1300
Branches: greasepencil-object
https://developer.blender.org/rB04e439513b8ab8f967a5fbb7a223ccf469eba547

GP Branch: Use ob->data instead of ob->gpd for storing GP object's GPencil 
datablock

WARNING: Old files created in the GP branch may break after this commit!

* There won't be data loss, but it will be necessary to manually fix this
  per-file as needed. The old ob->gpd pointer remains for now to ease the
  transition.

* The code will attempt to version patch old files that store data in this
  pointer. However, right now, this only works for GP Objects and for Empties.

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

M       source/blender/blenkernel/intern/gpencil.c
M       source/blender/blenkernel/intern/gpencil_modifier.c
M       source/blender/blenkernel/intern/object_update.c
M       source/blender/blenloader/intern/versioning_280.c
M       source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M       source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M       source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
M       source/blender/draw/engines/gpencil/gpencil_engine.c
M       source/blender/draw/engines/gpencil/gpencil_geom.c
M       source/blender/draw/engines/gpencil/gpencil_vfx.c
M       source/blender/editors/animation/anim_draw.c
M       source/blender/editors/animation/anim_filter.c
M       source/blender/editors/gpencil/drawgpencil.c
M       source/blender/editors/gpencil/gpencil_data.c
M       source/blender/editors/gpencil/gpencil_edit.c
M       source/blender/editors/gpencil/gpencil_utils.c
M       source/blender/editors/object/object_add.c
M       source/blender/editors/object/object_edit.c
M       source/blender/editors/object/object_modifier.c
M       source/blender/editors/object/object_transform.c
M       source/blender/editors/object/object_vgroup.c
M       source/blender/editors/screen/screen_ops.c
M       source/blender/editors/space_outliner/outliner_tree.c
M       source/blender/editors/space_time/space_time.c
M       source/blender/makesrna/intern/rna_object.c
M       source/blender/modifiers/intern/MOD_gpencilarray.c
M       source/blender/modifiers/intern/MOD_gpencilcolor.c
M       source/blender/modifiers/intern/MOD_gpencildupli.c
M       source/blender/modifiers/intern/MOD_gpencillattice.c
M       source/blender/modifiers/intern/MOD_gpencilnoise.c
M       source/blender/modifiers/intern/MOD_gpencilopacity.c
M       source/blender/modifiers/intern/MOD_gpencilsimplify.c
M       source/blender/modifiers/intern/MOD_gpencilsubdiv.c
M       source/blender/modifiers/intern/MOD_gpencilthick.c
M       source/blender/modifiers/intern/MOD_gpenciltint.c

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

diff --git a/source/blender/blenkernel/intern/gpencil.c 
b/source/blender/blenkernel/intern/gpencil.c
index fb49c078373..5eb806baf4d 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -2142,7 +2142,7 @@ static void boundbox_gpencil(Object *ob)
        }
 
        bb  = ob->bb;
-       gpd = ob->gpd;
+       gpd = ob->data;
 
        gpencil_minmax(gpd, min, max);
        BKE_boundbox_init_from_minmax(bb, min, max);
@@ -2153,11 +2153,17 @@ static void boundbox_gpencil(Object *ob)
 /* get bounding box */
 BoundBox *BKE_gpencil_boundbox_get(Object *ob)
 {
-       if ((!ob) || (ob->gpd == NULL))
+       bGPdata *gpd;
+       
+       if (ELEM(NULL, ob, ob->data))
                return NULL;
-
-       if ((ob->bb) && ((ob->bb->flag & BOUNDBOX_DIRTY) == 0) && 
((ob->gpd->flag & GP_DATA_CACHE_IS_DIRTY) == 0))
+       
+       gpd = ob->data;
+       if ((ob->bb) && ((ob->bb->flag & BOUNDBOX_DIRTY) == 0) && 
+           ((gpd->flag & GP_DATA_CACHE_IS_DIRTY) == 0))
+       {
                return ob->bb;
+       }
 
        boundbox_gpencil(ob);
 
@@ -2170,7 +2176,7 @@ BoundBox *BKE_gpencil_boundbox_get(Object *ob)
 /* remove a vertex group */
 void BKE_gpencil_vgroup_remove(Object *ob, bDeformGroup *defgroup)
 {
-       bGPdata *gpd = ob->gpd;
+       bGPdata *gpd = ob->data;
        bGPDspoint *pt = NULL;
        bGPDweight *gpw = NULL;
        const int def_nr = BLI_findindex(&ob->defbase, defgroup);
@@ -2217,7 +2223,7 @@ bGPDweight 
*BKE_gpencil_vgroup_add_point_weight(bGPDspoint *pt, int index, float
                }
        }
 
-       ++pt->totweight;
+       pt->totweight++;
        if (pt->totweight == 1) {
                pt->weights = MEM_callocN(sizeof(bGPDweight), "gp_weight");
        }
diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c 
b/source/blender/blenkernel/intern/gpencil_modifier.c
index b1b59865fcd..c978350e007 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -986,7 +986,7 @@ bool BKE_gpencil_has_geometry_modifiers(Object *ob)
 void BKE_gpencil_stroke_modifiers(Object *ob, bGPDlayer *gpl, bGPDframe 
*UNUSED(gpf), bGPDstroke *gps)
 {
        ModifierData *md;
-       bGPdata *gpd = ob->gpd;
+       bGPdata *gpd = ob->data;
        bool is_edit = GPENCIL_ANY_EDIT_MODE(gpd);
 
        int id = 0;
@@ -1042,7 +1042,7 @@ void BKE_gpencil_stroke_modifiers(Object *ob, bGPDlayer 
*gpl, bGPDframe *UNUSED(
 void BKE_gpencil_geometry_modifiers(Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
 {
        ModifierData *md;
-       bGPdata *gpd = ob->gpd;
+       bGPdata *gpd = ob->data;
        bool is_edit = GPENCIL_ANY_EDIT_MODE(gpd);
 
        int id = 0;
diff --git a/source/blender/blenkernel/intern/object_update.c 
b/source/blender/blenkernel/intern/object_update.c
index 3cc3b99b585..08b386d85cc 100644
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@ -324,7 +324,7 @@ void BKE_object_eval_uber_data(const EvaluationContext 
*eval_ctx,
                        BKE_curve_batch_cache_dirty(ob->data, 
BKE_CURVE_BATCH_DIRTY_ALL);
                        break;
                case OB_GPENCIL:
-                       BKE_gpencil_batch_cache_dirty(ob->gpd);
+                       BKE_gpencil_batch_cache_dirty(ob->data);
                        break;
        }
 
diff --git a/source/blender/blenloader/intern/versioning_280.c 
b/source/blender/blenloader/intern/versioning_280.c
index dc390661c70..22927892875 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -434,15 +434,43 @@ void blo_do_versions_280(FileData *fd, Library 
*UNUSED(lib), Main *main)
 
                                ob = BKE_object_add(main, scene, sl, 
OB_GPENCIL, "GP_Scene");
                                zero_v3(ob->loc);
-                               ob->gpd = scene->gpd;
+                               ob->data = scene->gpd;
                                scene->gpd = NULL;
 
                                /* set cache as dirty */
-                               BKE_gpencil_batch_cache_dirty(ob->gpd);
+                               BKE_gpencil_batch_cache_dirty(ob->data);
                        }
                        /* set default mode as object */
                        scene->toolsettings->gpencil_src = 
GP_TOOL_SOURCE_OBJECT;
                }
+               
+               /* Handle object-linked grease pencil datablocks */
+               for (Object *ob = main->scene.first; ob; ob = ob->id.next) {
+                       if (ob->gpd) {
+                               if (ob->type == OB_GPENCIL) {
+                                       /* GP Object - remap the links */
+                                       ob->data = ob->gpd;
+                                       ob->gpd = NULL;
+                               }
+                               else if (ob->type == OB_EMPTY) {
+                                       /* Empty with GP data - This should be 
able to be converted
+                                        * to a GP object with little data loss
+                                        */
+                                       ob->data = ob->gpd;
+                                       ob->gpd = NULL;
+                                       ob->type = OB_EMPTY;
+                               }
+                               else {
+                                       /* FIXME: What to do in this case?
+                                        *
+                                        * We cannot create new objects for 
these, as we don't have a scene & scene layer
+                                        * to put them into from here...
+                                        */
+                                       printf("WARNING: Old Grease Pencil data 
('%s') still exists on Object '%s'\n",
+                                              ob->gpd->id.name+2, 
ob->id.name+2);
+                               }
+                       }
+               }
 
                /* Convert grease pencil palettes to blender palettes */
                if (!DNA_struct_elem_find(fd->filesdna, "bGPDstroke", 
"Palette", "*palette")) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 7e9b363ff28..65a93bc8775 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -437,6 +437,7 @@ void DepsgraphNodeBuilder::build_object(Scene *scene, 
Object *ob)
                        case OB_SURF:
                        case OB_MBALL:
                        case OB_LATTICE:
+                       case OB_GPENCIL:
                                build_obdata_geom(scene, ob);
                                /* TODO(sergey): Only for until we support 
granular
                                 * update of curves.
@@ -494,30 +495,6 @@ void DepsgraphNodeBuilder::build_object(Scene *scene, 
Object *ob)
                build_particles(scene, ob);
        }
 
-       /* Grease pencil. */
-       if (ob->gpd != NULL) {
-               build_gpencil(ob->gpd);
-               
-               /* Temporary uber-update node, which does everything.
-                * It is for the being we're porting old dependencies into the 
new system.
-                * We'll get rid of this node as soon as all the granular 
update functions
-                * are filled in.
-                *
-                * TODO(sergey): Get rid of this node.
-                * XXX: This code should go as soon as gp object stores its 
data in obdata
-                */
-               OperationDepsNode *op_node;
-               op_node = add_operation_node(&ob->id,
-                                            DEG_NODE_TYPE_GEOMETRY,
-                                            
function_bind(BKE_object_eval_uber_data,
-                                                          _1,
-                                                          scene,
-                                                          ob),
-                                            DEG_OPCODE_GEOMETRY_UBEREVAL);
-               op_node->set_as_exit();
-
-       }
-
        /* Object that this is a proxy for. */
        if (ob->proxy) {
                ob->proxy->proxy_from = ob;
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 04c0ed74bef..4d92ad75af5 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -511,6 +511,7 @@ void DepsgraphRelationBuilder::build_object(Main *bmain, 
Scene *scene, Object *o
                        case OB_SURF:
                        case OB_MBALL:
                        case OB_LATTICE:
+                       case OB_GPENCIL:
                        {
                                build_obdata_geom(bmain, scene, ob);
                                break;
@@ -551,48 +552,6 @@ void DepsgraphRelationBuilder::build_object(Main *bmain, 
Scene *scene, Object *o
                build_particles(scene, ob);
        }
 
-       /* Grease pencil. */
-       if (ob->gpd != NULL) {
-               build_gpencil(ob->gpd);
-               
-               // XXX: Remove duplicated code... quick hack for now
-               if (ob->modifiers.first != NULL) {
-                       OperationKey obdata_ubereval_key(&ob->id,
-                                        DEG_NODE_TYPE_GEOMETRY,
-                                        DEG_OPCODE_GEOMETRY_UBEREVAL);
-                       
-                       LINKLIST_FOREACH (ModifierData *, md, &ob->modifiers) {
-                               const ModifierTypeInfo *mti = 
modifierType_getInfo((ModifierType)md->type);
-
-                               if (mti->updateDepsgraph) {
-                                       DepsNodeHandle handle = 
create_node_handle(obdata_ubereval_key);
-                                       mti->updateDepsgraph(
-                                               md,
-                                               bmain,
-                                               scene,
-                                               ob,
-                                               reinterpret_cast< 
::DepsNodeHandle* >(&handle));
-                               }
-
-                               if (BKE_object_modifier_use_time(ob, md)) {
-                                       TimeSourceKey time_src_key;
-                                       add_relation(time_src_key, 
obdata_ubereval_key, "Time Source");
-
-                                       /* Hacky fix for T45633 (Animated 
modifiers aren't updated)
-                                        *
-                                        * This check works because 
BKE_object_modifier_use_time() tests
-                                        * for either the modifier needing 
time, or that it is animated.
-                                        */
-                                       /* XXX: Remove this hack when these 
links are added as part of build_animdata() instead */
-                                       if (modifier_dependsOnTime(md) == false 
&& needs_animdata_node(&ob->id)) {
-                                               ComponentKey 
animation_key(&ob->id, DEG_NODE_TYPE_ANIMATION);
-                                               add_relation(animation_key, 
obdata_ubereval_key, "Modifier Animation");
-                                       }
-                               }
-                       }
-               }
-       }
-
        /* Object that this is a proxy for. */
        if (ob->proxy != NULL) {
                ob->proxy->proxy_from = ob;
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c 
b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index c76e1c3909e..c2b02fc75ee 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -102,7 +102,7 @@ void gpencil_object_cache_add(tGPencilObjectCache 
*cache_array, Object *ob, int
 
 static GpencilBatchCache *gpencil_batch_get_element(Object *ob)
 {
-       bGPdata *gpd = ob->gpd;
+       bGPdata *gpd = ob->data;
        if (gpd->batch_cache_data == NULL) {
                gpd->batch_cache_data = BLI_ghash_str_new("GP batch cache 
data");
                return NULL;
@@ -166,7 +166,7 @@ static void gpencil_batch_cache_check_free_slots(Object 
*ob, bGPdata *UNUSED(gpd
 static void gpencil_batch_cache_init(Object *ob, int cfra)
 {
        GpencilBatchCache *cache = gpencil_batch_get_element(ob);
-       bGPdata *gpd = ob->gpd;
+       bGPdata *gpd = ob->data;
 
        if (G.debug_value >= 664) {
                printf("gpencil_batch_cache_init: %s\n", ob->id.name);
@@ -228,7 +228,7 @@ static void gpencil_batch_cache_clear(GpencilBatchCache 
*cache, bGPdata *gpd)
 /* get cache */
 static GpencilBatchCache *gpencil_batch_cache_get(Object *ob, int cfra)
 {
-       bGPdata *gpd = ob->gpd;
+       bGPdata *gpd = ob->data;
 
        if (!gpencil_batch_cache_valid(ob, gpd, cfra)) {
                if (G.debug_value >= 664) {
@@ -1208,8 +1208,8 @@ void gpencil_array_modifiers(GPENCIL_StorageLis

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to