30#define DNA_DEPRECATED_ALLOW
64 std::optional<Library *> ,
102 for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
129 for (
int i = 0; i < gpencil->
totcol; i++) {
173 if (gps->editcurve !=
nullptr) {
187 if (gpd ==
nullptr) {
193 gpd->
flag &= ~GP_DATA_STROKE_PAINTMODE;
194 gpd->
flag &= ~GP_DATA_STROKE_EDITMODE;
195 gpd->
flag &= ~GP_DATA_STROKE_SCULPTMODE;
196 gpd->
flag &= ~GP_DATA_STROKE_WEIGHTMODE;
197 gpd->
flag &= ~GP_DATA_STROKE_VERTEXMODE;
209 if (gpd->palettes.first !=
nullptr) {
229 gpl->runtime.icon_id = 0;
246 if (gps->editcurve !=
nullptr) {
276 N_(
"grease_pencils"),
325 if (dvert ==
nullptr) {
333 if (gps ==
nullptr) {
337 if (gps->
dvert ==
nullptr) {
341 for (
int i = 0; i < gps->
totpoints; i++) {
349 if (gps ==
nullptr) {
353 if (editcurve ==
nullptr) {
363 if (gps ==
nullptr) {
402 if (gpl ==
nullptr) {
408 gpf_next = gpf->
next;
424 mask_next = mask->
next;
433 if (list ==
nullptr) {
439 gpl_next = gpl->
next;
494 if (gpl ==
nullptr) {
506 if (gf->framenum == cframe) {
512 if (gf->framenum > cframe) {
523 &
LOG,
"Frame (%d) existed already for this layer_active. Using existing frame", cframe);
532 else if (
state == 0) {
547 if (gpl ==
nullptr) {
561 if (gpf->framenum > cframe) {
568 if (gpf->framenum == cframe) {
581 if (found ==
false) {
597 const bool setactive,
598 const bool add_to_header)
604 if (gpd ==
nullptr) {
618 if (gpl_active ==
nullptr) {
761 gps->
dvert =
nullptr;
768 bGPDframe *gpf,
int mat_idx,
int totpoints,
short thickness,
const bool insert_at_head)
773 if ((gps !=
nullptr) && (gpf !=
nullptr)) {
774 if (!insert_at_head) {
800 if (gps_src ==
nullptr) {
809 const bool dup_points,
815 gps_dst->
prev = gps_dst->
next =
nullptr;
821 if (gps_src->
dvert !=
nullptr) {
826 gps_dst->
dvert =
nullptr;
830 gps_dst->
points =
nullptr;
831 gps_dst->
dvert =
nullptr;
846 if (gpf_src ==
nullptr) {
852 gpf_dst->
prev = gpf_dst->
next =
nullptr;
869 const bool dup_frames,
870 const bool dup_strokes)
876 if (gpl_src ==
nullptr) {
882 gpl_dst->
prev = gpl_dst->
next =
nullptr;
915 if (gpd_src ==
nullptr) {
941 if (gpl ==
nullptr) {
960 if (gpf->framenum == cframe) {
974 if (gpl ==
nullptr) {
995 for (; gpf; gpf = gpf->
next) {
1010 if ((found) && (gpf->
framenum == cframe)) {
1031 for (; gpf; gpf = gpf->
prev) {
1040 if ((found) && (gpf->
framenum == cframe)) {
1066 if (
abs(cframe - first) >
abs(cframe - last)) {
1087 if ((found) && (gpf->
framenum == cframe)) {
1133 bool changed =
false;
1136 if (
ELEM(
nullptr, gpl, gpf)) {
1156 if (name[0] ==
'\0') {
1177 mask_next = mask->
next;
1178 if (
STREQ(mask->name, name)) {
1207 if (gpl_mask !=
nullptr) {
1211 mask->sort_index = 0;
1229 mask_dst->
prev = mask_dst->
next =
nullptr;
1254 if (thunk !=
nullptr) {
1255 *((
bool *)thunk) =
true;
1296 gpl->
flag &= ~GP_LAYER_ACTIVE;
1305 active->flag &= ~GP_LAYER_LOCKED;
1319 if (gpl == layer_active) {
1320 gpl->flag &= ~GP_LAYER_LOCKED;
1333 gpl->flag &= ~GP_LAYER_LOCKED;
1342 if (
ELEM(
nullptr, gpd, gpl)) {
1384 if (gpf->framenum < *r_initframe) {
1385 *r_initframe = gpf->framenum;
1387 if (gpf->framenum > *r_endframe) {
1388 *r_endframe = gpf->framenum;
1401 if (cur_falloff ==
nullptr) {
1427 const char *hexcol[] = {
1428 "FFFFFF",
"F2F2F2",
"E6E6E6",
"D9D9D9",
"CCCCCC",
"BFBFBF",
"B2B2B2",
"A6A6A6",
"999999",
1429 "8C8C8C",
"808080",
"737373",
"666666",
"595959",
"4C4C4C",
"404040",
"333333",
"262626",
1430 "1A1A1A",
"000000",
"F2FC24",
"FFEA00",
"FEA711",
"FE8B68",
"FB3B02",
"FE3521",
"D00000",
1431 "A81F3D",
"780422",
"2B0000",
"F1E2C5",
"FEE4B3",
"FEDABB",
"FEC28E",
"D88F57",
"BD6340",
1432 "A2402B",
"63352D",
"6B2833",
"34120C",
"E7CB8F",
"D1B38B",
"C1B17F",
"D7980B",
"FFB100",
1433 "FE8B00",
"FF6A00",
"B74100",
"5F3E1D",
"3B2300",
"FECADA",
"FE65CB",
"FE1392",
"DD3062",
1434 "C04A6D",
"891688",
"4D2689",
"441521",
"2C1139",
"241422",
"FFFF7D",
"FFFF00",
"FF7F00",
1435 "FF7D7D",
"FF7DFF",
"FF00FE",
"FF007F",
"FF0000",
"7F0000",
"0A0A00",
"F6FDFF",
"E9F7FF",
1436 "CFE6FE",
"AAC7FE",
"77B3FE",
"1E74FD",
"0046AA",
"2F4476",
"003052",
"0E0E25",
"EEF5F0",
1437 "D6E5DE",
"ACD8B9",
"6CADC6",
"42A9AF",
"007F7F",
"49675C",
"2E4E4E",
"1D3239",
"0F1C21",
1438 "D8FFF4",
"B8F4F5",
"AECCB5",
"76C578",
"358757",
"409B68",
"468768",
"1F512B",
"2A3C37",
1439 "122E1D",
"EFFFC9",
"E6F385",
"BCF51C",
"D4DC18",
"82D322",
"5C7F00",
"59932B",
"297F00",
1440 "004320",
"1C3322",
"00FF7F",
"00FF00",
"7DFF7D",
"7DFFFF",
"00FFFF",
"7D7DFF",
"7F00FF",
1441 "0000FF",
"3F007F",
"00007F"};
1449 const char *palette_id =
"Palette";
1453 if (palette ==
nullptr) {
1458 if (palette ==
nullptr) {
1464 for (
int i = 0; i <
ARRAY_SIZE(hexcol); i++) {
1484 if ((gpl->viewlayername[0] !=
'\0') && !
STREQ(view_layer->
name, gpl->viewlayername)) {
1494 if (
STREQ(gpl_mask->
info, mask->name)) {
1531 bool is_before_first =
false;
1536 float prev_opacity = gpl->opacity;
1550 if ((view_layer !=
nullptr) && (gpl->viewlayername[0] !=
'\0') &&
1551 !
STREQ(view_layer->
name, gpl->viewlayername))
1556 gpl->opacity = 0.0f;
1564 sta_gpf = end_gpf =
nullptr;
1567 if (act_gpf !=
nullptr && (gpf == act_gpf || (gpf->flag &
GP_FRAME_SELECT))) {
1570 if (gpf->framenum < act_gpf->
framenum) {
1571 gpf->runtime.onion_id = -1;
1574 gpf->runtime.onion_id = 1;
1578 if (sta_gpf ==
nullptr) {
1581 end_gpf = gpf->
next;
1591 if ((gpf_first !=
nullptr) && (act_gpf !=
nullptr) &&
1594 is_before_first =
true;
1596 if ((gpf_first !=
nullptr) && (act_gpf ==
nullptr)) {
1597 act_gpf = gpf_first;
1598 is_before_first =
true;
1610 bool is_wrong_keytype = (onion_keytype > -1) && (gpf->key_type != onion_keytype);
1612 int delta = (onion_mode_abs) ? (gpf->framenum - cfra) :
1615 if (is_before_first) {
1619 if (onion_mode_sel) {
1623 is_in_range = (-delta <= gpd->
gstep) && (delta <= gpd->gstep_next);
1625 if (onion_loop && !is_in_range) {
1629 delta += (delta < 0) ? (shift + 1) : -(shift + 1);
1631 is_in_range = (-delta <= gpd->
gstep) && (delta <= gpd->gstep_next);
1635 gpf->runtime.onion_id = (is_wrong_keytype || !is_in_range) ? INT_MAX : delta;
1638 if (!is_before_first || is_drawing) {
1643 sta_gpf =
static_cast<bGPDframe *
>(gpl->frames.first);
1648 end_gpf = sta_gpf =
nullptr;
1651 if (sta_gpf ==
nullptr && act_gpf ==
nullptr) {
1653 layer_cb(gpl, act_gpf,
nullptr, thunk);
1655 gpl->opacity = prev_opacity;
1660 for (
bGPDframe *gpf = sta_gpf; gpf && gpf != end_gpf; gpf = gpf->
next) {
1661 if ((gpf->runtime.onion_id == INT_MAX || gpf == act_gpf) && (!is_before_first)) {
1666 if (is_before_first && gpf == act_gpf) {
1667 is_before_first =
false;
1671 layer_cb(gpl, gpf,
nullptr, thunk);
1676 if (gps->totpoints == 0) {
1679 stroke_cb(gpl, gpf, gps, thunk);
1685 act_gpf = gpl->actframe;
1689 layer_cb(gpl, act_gpf,
nullptr, thunk);
1696 gpl->opacity = prev_opacity;
1701 if (gps->totpoints == 0) {
1704 stroke_cb(gpl, act_gpf, gps, thunk);
1710 gpl->opacity = prev_opacity;
1721 if (gps_eval !=
nullptr) {
1725 for (
int i = 0; i < gps_orig->totpoints; i++) {
1737 gps_eval = gps_eval->
next;
1747 if (gpf_eval !=
nullptr) {
1751 gpf_eval = gpf_eval->
next;
1765 if (gpl_eval !=
nullptr) {
1769 gpl_eval = gpl_eval->
next;
1782 float diff_mat[4][4])
1790 if (obparent_eval ==
nullptr) {
1792 copy_m4_m4(diff_mat, ob_eval->object_to_world().ptr());
1803 add_v3_v3(diff_mat[3], ob_eval->object_to_world().location());
1810 float tmp_mat[4][4];
1813 add_v3_v3(diff_mat[3], ob_eval->object_to_world().location());
1818 add_v3_v3(diff_mat[3], ob_eval->object_to_world().location());
1834 float cur_mat[4][4];
1837 bool changed =
false;
1856 gpf_start =
static_cast<bGPDframe *
>(gpl->frames.first);
1861 if (gpl->actframe ==
nullptr) {
1864 gpf_start = gpl->actframe;
1865 gpf_end = gpl->actframe->
next;
1868 if (gpl->parent !=
nullptr) {
1872 mul_m4_m4m4(cur_mat, ob->world_to_object().ptr(), ob_parent->object_to_world().ptr());
1874 else if (gpl->partype ==
PARBONE) {
1876 if (pchan !=
nullptr) {
1878 ob->world_to_object().ptr(),
1879 ob_parent->object_to_world().ptr(),
1892 float tmp_mat[4][4];
1894 transformed |= !
equals_m4m4(gpl->layer_mat, tmp_mat);
1900 if (!changed && !transformed) {
1905 for (
bGPDframe *gpf = gpf_start; gpf !=
nullptr && gpf != gpf_end; gpf = gpf->
next) {
1907 if (gpf->runtime.onion_id == INT_MAX) {
1912 if (changed || transformed) {
1916 for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
1934 const int name_prefix_len = strlen(name_prefix);
1935 for (
int i = 0; i < ob->
totcol; i++) {
1937 if ((ma !=
nullptr) && (ma->
gp_style !=
nullptr) &&
Blender kernel action and pose functionality.
bPoseChannel * BKE_pose_channel_find_name(const bPose *pose, const char *name)
void BKE_brush_tag_unsaved_changes(Brush *brush)
void(* gpIterCb)(struct bGPDlayer *layer, struct bGPDframe *frame, struct bGPDstroke *stroke, void *thunk)
void BKE_gpencil_free_update_cache(struct bGPdata *gpd)
bool BKE_icon_delete(int icon_id)
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
void * BKE_libblock_alloc(Main *bmain, short type, const char *name, int flag) ATTR_WARN_UNUSED_RESULT
ID * BKE_id_copy(Main *bmain, const ID *id)
void BKE_id_blend_write(BlendWriter *writer, ID *id)
#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(data_, id_super_, cb_flag_)
General operations, lookup, etc. for materials.
struct Material * BKE_object_material_get(struct Object *ob, short act)
PaletteColor * BKE_palette_color_add(Palette *palette)
Palette * BKE_palette_add(Main *bmain, const char *name)
void BKE_paint_palette_set(Paint *paint, Palette *palette)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
#define LISTBASE_FOREACH_BACKWARD(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void void BLI_listbase_sort(struct ListBase *listbase, int(*cmp)(const void *, const void *)) ATTR_NONNULL(1
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_insertlinkbefore(struct ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
void void void BLI_listbase_sort_r(ListBase *listbase, int(*cmp)(void *, const void *, const void *), void *thunk) ATTR_NONNULL(1
void hex_to_rgb(const char *hexcol, float *r_r, float *r_g, float *r_b)
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void unit_m4(float m[4][4])
void mul_m4_v3(const float M[4][4], float r[3])
#define mul_m4_series(...)
bool equals_m4m4(const float mat1[4][4], const float mat2[4][4])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
void loc_eul_size_to_mat4(float R[4][4], const float loc[3], const float eul[3], const float size[3])
MINLINE void copy_v4_v4(float r[4], const float a[4])
MINLINE bool is_one_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE bool is_zero_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3_fl(float r[3], float f)
MINLINE void zero_v3(float r[3])
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE void copy_v2_fl(float r[2], float f)
#define STRNCPY_UTF8(dst, src)
void BLI_uniquename(const struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_maxncpy) ATTR_NONNULL(1
#define ARRAY_SET_ITEMS(...)
#define STREQLEN(a, b, n)
#define BLO_write_id_struct(writer, struct_name, id_address, id)
#define BLO_write_struct(writer, struct_name, data_ptr)
#define BLO_write_struct_array(writer, struct_name, array_size, data_ptr)
#define BLO_read_struct_list(reader, struct_name, list)
#define BLO_read_struct_array(reader, struct_name, array_size, ptr_p)
#define BLO_write_struct_list(writer, struct_name, list_ptr)
void BLO_read_pointer_array(BlendDataReader *reader, int array_size, void **ptr_p)
#define BLO_read_struct(reader, struct_name, ptr_p)
void BLO_write_pointer_array(BlendWriter *writer, uint num, const void *data_ptr)
#define BLT_I18NCONTEXT_ID_GPENCIL
#define CLOG_ERROR(clg_ref,...)
#define CLOG_STR_ERROR(clg_ref, str)
void DEG_id_tag_update(ID *id, unsigned int flags)
Object * DEG_get_evaluated_object(const Depsgraph *depsgraph, Object *object)
#define FILTER_ID_GD_LEGACY
#define ID_IS_LINKED(_id)
#define GP_DEFAULT_CURVE_EDIT_CORNER_ANGLE
#define GP_DEFAULT_PIX_FACTOR
#define GPENCIL_PLAY_ON(gpd)
#define GP_DEFAULT_CURVE_RESOLUTION
#define GPENCIL_MULTIEDIT_SESSIONS_ON(gpd)
#define GPENCIL_PAINT_MODE(gpd)
@ GP_LAYER_DISABLE_MASKS_IN_VIEWLAYER
#define GP_DEFAULT_GRID_LINES
#define GP_DEFAULT_CURVE_ERROR
@ GP_DATA_SHOW_ONIONSKINS
@ GP_DATA_CURVE_ADAPTIVE_RESOLUTION
@ GP_DATA_STROKE_WEIGHTMODE
@ GP_DATA_AUTOLOCK_LAYERS
Read Guarded memory(de)allocation.
static float frame_len(const Frame *frame)
local_group_size(16, 16) .push_constant(Type b
const Depsgraph * depsgraph
draw_view in_light_buf[] float
static void greasepencil_copy_data(Main *, std::optional< Library * >, ID *id_dst, const ID *id_src, const int)
bGPDframe * BKE_gpencil_frame_addcopy(bGPDlayer *gpl, int cframe)
bGPDframe * BKE_gpencil_frame_duplicate(const bGPDframe *gpf_src, const bool dup_strokes)
void BKE_gpencil_tag(bGPdata *gpd)
void BKE_gpencil_free_stroke_weights(bGPDstroke *gps)
bGPDframe * BKE_gpencil_layer_frame_get(bGPDlayer *gpl, int cframe, eGP_GetFrame_Mode addnew)
bGPDstroke * BKE_gpencil_stroke_duplicate(bGPDstroke *gps_src, const bool dup_points, const bool)
void BKE_gpencil_frame_range_selected(bGPDlayer *gpl, int *r_initframe, int *r_endframe)
void BKE_gpencil_layer_mask_copy(const bGPDlayer *gpl_src, bGPDlayer *gpl_dst)
bGPDlayer * BKE_gpencil_layer_named_get(bGPdata *gpd, const char *name)
bGPdata * BKE_gpencil_data_addnew(Main *bmain, const char name[])
void BKE_gpencil_batch_cache_free(bGPdata *gpd)
bGPDlayer * BKE_gpencil_layer_duplicate(const bGPDlayer *gpl_src, const bool dup_frames, const bool dup_strokes)
void BKE_gpencil_free_frames(bGPDlayer *gpl)
static int gpencil_cb_sort_masks(const void *arg1, const void *arg2)
bGPDlayer * BKE_gpencil_layer_active_get(bGPdata *gpd)
void BKE_gpencil_free_point_weights(MDeformVert *dvert)
static bool gpencil_is_layer_mask(ViewLayer *view_layer, bGPdata *gpd, bGPDlayer *gpl_mask)
bGPDstroke * BKE_gpencil_stroke_new(int mat_idx, int totpoints, short thickness)
void BKE_gpencil_layer_mask_remove(bGPDlayer *gpl, bGPDlayer_Mask *mask)
bool BKE_gpencil_layer_is_editable(const bGPDlayer *gpl)
void(* BKE_gpencil_batch_cache_dirty_tag_cb)(bGPdata *gpd)
bGPDcurve * BKE_gpencil_stroke_editcurve_new(const int tot_curve_points)
void BKE_gpencil_free_stroke_editcurve(bGPDstroke *gps)
void BKE_gpencil_layer_autolock_set(bGPdata *gpd, const bool unlock)
void BKE_gpencil_free_layers(ListBase *list)
void BKE_gpencil_stroke_weights_duplicate(bGPDstroke *gps_src, bGPDstroke *gps_dst)
static void greasepencil_blend_write(BlendWriter *writer, ID *id, const void *id_address)
static void greasepencil_free_data(ID *id)
bool BKE_gpencil_free_strokes(bGPDframe *gpf)
void BKE_gpencil_layer_frames_sort(bGPDlayer *gpl, bool *r_has_duplicate_frames)
void BKE_gpencil_layer_original_pointers_update(const bGPDlayer *gpl_orig, const bGPDlayer *gpl_eval)
void BKE_gpencil_palette_ensure(Main *bmain, Scene *scene)
void BKE_gpencil_visible_stroke_advanced_iter(ViewLayer *view_layer, Object *ob, gpIterCb layer_cb, gpIterCb stroke_cb, void *thunk, bool do_onion, int cfra)
void BKE_gpencil_free_legacy_palette_data(ListBase *list)
bGPDstroke * BKE_gpencil_stroke_add(bGPDframe *gpf, int mat_idx, int totpoints, short thickness, const bool insert_at_head)
void BKE_gpencil_free_layer_masks(bGPDlayer *gpl)
bGPdata * BKE_gpencil_data_duplicate(Main *bmain, const bGPdata *gpd_src, bool internal_copy)
static int gpencil_cb_cmp_frame(void *thunk, const void *a, const void *b)
void BKE_gpencil_update_layer_transforms(const Depsgraph *depsgraph, Object *ob)
void(* BKE_gpencil_batch_cache_free_cb)(bGPdata *gpd)
bGPDframe * BKE_gpencil_layer_frame_find(bGPDlayer *gpl, int cframe)
void BKE_gpencil_update_orig_pointers(const Object *ob_orig, const Object *ob_eval)
static void greasepencil_foreach_id(ID *id, LibraryForeachIDData *data)
void BKE_gpencil_layer_mask_remove_ref(bGPdata *gpd, const char *name)
bGPDframe * BKE_gpencil_frame_addnew(bGPDlayer *gpl, int cframe)
void BKE_gpencil_batch_cache_dirty_tag(bGPdata *gpd)
void BKE_gpencil_blend_read_data(BlendDataReader *reader, bGPdata *gpd)
bool BKE_gpencil_layer_frame_delete(bGPDlayer *gpl, bGPDframe *gpf)
float BKE_gpencil_multiframe_falloff_calc(bGPDframe *gpf, int actnum, int f_init, int f_end, CurveMapping *cur_falloff)
void BKE_gpencil_layer_transform_matrix_get(const Depsgraph *depsgraph, Object *obact, bGPDlayer *gpl, float diff_mat[4][4])
int BKE_gpencil_material_find_index_by_name_prefix(Object *ob, const char *name_prefix)
IDTypeInfo IDType_ID_GD_LEGACY
void BKE_gpencil_layer_mask_sort_all(bGPdata *gpd)
void BKE_gpencil_frame_original_pointers_update(const bGPDframe *gpf_orig, const bGPDframe *gpf_eval)
void BKE_gpencil_layer_mask_cleanup(bGPdata *gpd, bGPDlayer *gpl)
void BKE_gpencil_data_update_orig_pointers(const bGPdata *gpd_orig, const bGPdata *gpd_eval)
void BKE_gpencil_free_data(bGPdata *gpd, bool free_all)
void BKE_gpencil_free_stroke(bGPDstroke *gps)
bGPDlayer * BKE_gpencil_layer_addnew(bGPdata *gpd, const char *name, const bool setactive, const bool add_to_header)
void BKE_gpencil_brush_material_set(Brush *brush, Material *ma)
static void greasepencil_blend_read_data(BlendDataReader *reader, ID *id)
void BKE_gpencil_layer_active_set(bGPdata *gpd, bGPDlayer *active)
void BKE_gpencil_layer_mask_sort(bGPdata *gpd, bGPDlayer *gpl)
void BKE_gpencil_layer_delete(bGPdata *gpd, bGPDlayer *gpl)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_dupallocN)(const void *vmemh)
ccl_device_inline float4 mask(const int4 mask, const float4 a)
struct Material * material
struct BrushGpencilSettings * gpencil_settings
struct MaterialGPencilStyle * gp_style
bGPDcurve_point * curve_points
struct bGPDframe * gpf_orig
bGPDframe_Runtime runtime
struct bGPDlayer_Mask * prev
struct bGPDlayer_Mask * next
struct bGPDlayer * gpl_orig
bGPDlayer_Runtime runtime
float vertex_paint_opacity
struct bGPDspoint * pt_orig
bGPDspoint_Runtime runtime
struct bGPDstroke * gps_orig
bGPDstroke_Runtime runtime
struct bGPDcurve * editcurve
struct MDeformVert * dvert
struct GPencilUpdateCache * update_cache
ListBase vertex_group_names
float curve_edit_corner_angle
int curve_edit_resolution
float curve_edit_threshold
ccl_device_inline int abs(int x)