Merge branch 'master' into blender2.8
[blender.git] / source / blender / blenkernel / BKE_gpencil_modifier.h
index cce1d4b0a4a37f4c4ad7acb48bfa82d8d4cafbc9..e31f61c909adf5b7f4c4531ece92ec1ed5f23025 100644 (file)
@@ -83,6 +83,8 @@ typedef enum {
 
        /* can't be added manually by user */
        eGpencilModifierTypeFlag_NoUserAdd = (1 << 5),
+       /* can't be applied */
+       eGpencilModifierTypeFlag_NoApply = (1 << 6),
 } GpencilModifierTypeFlag;
 
 /* IMPORTANT! Keep ObjectWalkFunc and IDWalkFunc signatures compatible. */
@@ -150,8 +152,18 @@ typedef struct GpencilModifierTypeInfo {
        void (*bakeModifier)(struct Main *bmain, struct Depsgraph *depsgraph,
                            struct GpencilModifierData *md, struct Object *ob);
 
+
        /********************* Optional functions *********************/
 
+       /* Callback for GP "time" modifiers that offset keyframe time
+        * Returns the frame number to be used after apply the modifier. This is
+        * usually an offset of the animation for duplicated datablocks.
+        *
+        * This function is optional.
+        */
+       int (*remapTime)(struct GpencilModifierData *md, struct Depsgraph *depsgraph,
+               struct Scene *scene, struct Object *ob, struct bGPDlayer *gpl, int cfra);
+
        /* Initialize new instance data for this modifier type, this function
         * should set modifier variables to their default values.
         *
@@ -220,9 +232,12 @@ typedef struct GpencilModifierTypeInfo {
         */
        void (*foreachTexLink)(struct GpencilModifierData *md, struct Object *ob,
                               GreasePencilTexWalkFunc walk, void *userData);
-} GpencilModifierTypeInfo;
 
-void BKE_gpencil_instance_modifier_instance_tfm(struct InstanceGpencilModifierData *mmd, const int elem_idx[3], float r_mat[4][4]);
+       /* get the number of times the strokes are duplicated in this modifier.
+        * This is used to calculate the size of the GPU VBOs
+        */
+       int (*getDuplicationFactor)(struct GpencilModifierData *md);
+} GpencilModifierTypeInfo;
 
 /* Initialize modifier's global data (type info and some common global storages). */
 void BKE_gpencil_modifier_init(void);
@@ -242,6 +257,7 @@ void BKE_gpencil_modifiers_foreachIDLink(struct Object *ob, GreasePencilIDWalkFu
 void BKE_gpencil_modifiers_foreachTexLink(struct Object *ob, GreasePencilTexWalkFunc walk, void *userData);
 
 bool BKE_gpencil_has_geometry_modifiers(struct Object *ob);
+bool BKE_gpencil_has_time_modifiers(struct Object *ob);
 
 void BKE_gpencil_stroke_modifiers(
        struct Depsgraph *depsgraph, struct Object *ob,
@@ -249,6 +265,9 @@ void BKE_gpencil_stroke_modifiers(
 void BKE_gpencil_geometry_modifiers(
        struct Depsgraph *depsgraph, struct Object *ob,
        struct bGPDlayer *gpl, struct bGPDframe *gpf, bool is_render);
+int BKE_gpencil_time_modifier(
+       struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob,
+       struct bGPDlayer *gpl, int cfra, bool is_render);
 
 void BKE_gpencil_lattice_init(struct Object *ob);
 void BKE_gpencil_lattice_clear(struct Object *ob);