[Bf-blender-cvs] [63fcb0e7499] greasepencil-object: WIP: Remove palettecolor pointer
Antonio Vazquez
noreply at git.blender.org
Thu Apr 19 19:20:42 CEST 2018
Commit: 63fcb0e749937956a0ae803752ebd5f94761b2b1
Author: Antonio Vazquez
Date: Thu Apr 19 19:19:10 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rB63fcb0e749937956a0ae803752ebd5f94761b2b1
WIP: Remove palettecolor pointer
Still Hue/Saturation and Tint pending.
Now both are disabled while found a solution.
===================================================================
M source/blender/blenkernel/BKE_gpencil.h
M source/blender/blenkernel/intern/gpencil.c
M source/blender/blenloader/intern/readfile.c
M source/blender/blenloader/intern/versioning_270.c
M source/blender/blenloader/intern/versioning_280.c
M source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
M source/blender/draw/engines/gpencil/gpencil_geom.c
M source/blender/editors/gpencil/drawgpencil.c
M source/blender/editors/gpencil/gpencil_brush.c
M source/blender/editors/gpencil/gpencil_data.c
M source/blender/editors/gpencil/gpencil_edit.c
M source/blender/editors/gpencil/gpencil_fill.c
M source/blender/editors/gpencil/gpencil_paint.c
M source/blender/editors/gpencil/gpencil_primitive.c
M source/blender/editors/gpencil/gpencil_utils.c
M source/blender/editors/sculpt_paint/paint_ops.c
M source/blender/editors/space_view3d/view3d_manipulator_ruler.c
M source/blender/editors/space_view3d/view3d_ruler.c
M source/blender/makesdna/DNA_gpencil_types.h
M source/blender/makesrna/intern/rna_gpencil.c
M source/blender/makesrna/intern/rna_palette.c
M source/blender/modifiers/intern/MOD_gpencil_util.c
M source/blender/modifiers/intern/MOD_gpencilarray.c
M source/blender/modifiers/intern/MOD_gpencilbuild.c
M source/blender/modifiers/intern/MOD_gpencilcolor.c
M source/blender/modifiers/intern/MOD_gpencilopacity.c
M source/blender/modifiers/intern/MOD_gpenciltint.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 762b32cb00a..fe8c31b2ea5 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -171,8 +171,7 @@ struct bGPDpalettecolor *BKE_gpencil_palettecolor_getactive(struct bGPDpalette *
void BKE_gpencil_palettecolor_setactive(struct bGPDpalette *palette, struct bGPDpalettecolor *active);
void BKE_gpencil_palettecolor_delete(struct bGPDpalette *palette, struct bGPDpalettecolor *palcolor);
struct bGPDpalettecolor *BKE_gpencil_palettecolor_getbyname(struct bGPDpalette *palette, char *name);
-void BKE_gpencil_palettecolor_allnames(struct PaletteColor *palcolor, const char *newname);
-void BKE_gpencil_palettecolor_changename(struct PaletteColor *palcolor, struct bGPdata *gpd, const char *newname);
+void BKE_gpencil_palettecolor_allnames(struct PaletteColor *palcolor, const char *oldname, const char *newname);
void BKE_gpencil_palettecolor_delete_allstrokes(struct Main *bmain, struct PaletteColor *palcolor);
/* object boundbox */
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 9faad565a23..ad68a35f2de 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -153,7 +153,6 @@ bool BKE_gpencil_free_layer_temp_data(bGPDlayer *UNUSED(gpl), bGPDframe *derived
/* free strokes */
for (bGPDstroke *gps = derived_gpf->strokes.first; gps; gps = gps_next) {
gps_next = gps->next;
- MEM_SAFE_FREE(gps->palcolor);
BKE_gpencil_free_stroke(gps);
}
BLI_listbase_clear(&derived_gpf->strokes);
@@ -551,7 +550,6 @@ bGPDstroke *BKE_gpencil_add_stroke(
gps->tot_triangles = 0;
gps->palette = palette;
- gps->palcolor = palcolor;
BLI_strncpy(gps->colorname, colorname, sizeof(gps->colorname));
/* add to frame */
@@ -645,11 +643,13 @@ void BKE_gpencil_frame_copy_strokes(bGPDframe *gpf_src, struct bGPDframe *gpf_ds
static void gpencil_fix_null_palette(const bContext *C, bGPdata *gpd, bGPDstroke *gps_src)
{
Palette *tmp_palette = NULL;
+ PaletteColor *palcolor = NULL;
+
printf("Fixing wrong color pointer:%s\n", gps_src->colorname);
tmp_palette = BKE_palette_get_active_from_context(C);
if (!tmp_palette) {
bGPDpaletteref *palslot;
-
+
if (BLI_listbase_count(&gpd->palette_slots) > 0) {
palslot = BLI_findlink(&gpd->palette_slots, 0);
}
@@ -661,14 +661,9 @@ static void gpencil_fix_null_palette(const bContext *C, bGPdata *gpd, bGPDstroke
gps_src->palette = tmp_palette;
if (BKE_palette_is_empty(tmp_palette)) {
- gps_src->palcolor = BKE_palette_color_add_name(tmp_palette, gps_src->colorname);
- }
- else {
- gps_src->palcolor = BKE_palette_color_getbyname(tmp_palette, gps_src->colorname);
- if (gps_src->palcolor == NULL) {
- gps_src->palcolor = BKE_palette_color_get_active(tmp_palette);
- }
+ palcolor = BKE_palette_color_add_name(tmp_palette, gps_src->colorname);
}
+
}
/* make a copy of a given gpencil frame and copy colors too */
@@ -699,7 +694,6 @@ bGPDframe *BKE_gpencil_frame_color_duplicate(const bContext *C, bGPdata *gpd, co
BKE_gpencil_stroke_weights_duplicate(gps_src, gps_dst);
gps_dst->triangles = MEM_dupallocN(gps_src->triangles);
- gps_dst->palcolor = MEM_dupallocN(gps_src->palcolor);
BLI_addtail(&gpf_dst->strokes, gps_dst);
}
@@ -1376,11 +1370,6 @@ static void gpencil_strokes_palette_change_all(bGPdata *gpd, Palette *old_palett
if (gps->palette == old_palette) {
/* change palette */
gps->palette = new_palette;
-
- /* find new matching color */
- // XXX: optimise?
- // XXX: what to do if not set?
- gps->palcolor = BKE_palette_color_getbyname(new_palette, gps->colorname);
}
}
}
@@ -1659,19 +1648,8 @@ bGPDpalettecolor *BKE_gpencil_palettecolor_getbyname(bGPDpalette *palette, char
return BLI_findstring(&palette->colors, name, offsetof(bGPDpalettecolor, info));
}
-/* Change color name in all gpd datablocks */
-void BKE_gpencil_palettecolor_allnames(PaletteColor *palcolor, const char *newname)
-{
- bGPdata *gpd;
- Main *bmain = G.main;
-
- for (gpd = bmain->gpencil.first; gpd; gpd = gpd->id.next) {
- BKE_gpencil_palettecolor_changename(palcolor, gpd, newname);
- }
-}
-
/* Change color name in all strokes */
-void BKE_gpencil_palettecolor_changename(PaletteColor *palcolor, bGPdata *gpd, const char *newname)
+static void BKE_gpencil_palettecolor_changename(PaletteColor *palcolor, bGPdata *gpd, const char *oldname, const char *newname)
{
bGPDlayer *gpl;
bGPDframe *gpf;
@@ -1684,7 +1662,7 @@ void BKE_gpencil_palettecolor_changename(PaletteColor *palcolor, bGPdata *gpd, c
for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
for (gps = gpf->strokes.first; gps; gps = gps->next) {
- if (gps->palcolor == palcolor) {
+ if (STREQ(gps->colorname, oldname)) {
BLI_strncpy(gps->colorname, newname, sizeof(gps->colorname));
}
}
@@ -1693,6 +1671,17 @@ void BKE_gpencil_palettecolor_changename(PaletteColor *palcolor, bGPdata *gpd, c
}
+/* Change color name in all gpd datablocks */
+void BKE_gpencil_palettecolor_allnames(PaletteColor *palcolor, const char *oldname, const char *newname)
+{
+ bGPdata *gpd;
+ Main *bmain = G.main;
+
+ for (gpd = bmain->gpencil.first; gpd; gpd = gpd->id.next) {
+ BKE_gpencil_palettecolor_changename(palcolor, gpd, oldname, newname);
+ }
+}
+
/* Delete all strokes of the color for all gpd datablocks */
void BKE_gpencil_palettecolor_delete_allstrokes(Main *bmain, PaletteColor *palcolor)
{
@@ -1700,6 +1689,7 @@ void BKE_gpencil_palettecolor_delete_allstrokes(Main *bmain, PaletteColor *palco
bGPDlayer *gpl;
bGPDframe *gpf;
bGPDstroke *gps, *gpsn;
+ PaletteColor *gps_palcolor = NULL;
/* TODO: Optimise this by only checking GP datablocks that reference the palette this comes from */
for (gpd = bmain->gpencil.first; gpd; gpd = gpd->id.next) {
@@ -1707,8 +1697,8 @@ void BKE_gpencil_palettecolor_delete_allstrokes(Main *bmain, PaletteColor *palco
for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
for (gps = gpf->strokes.first; gps; gps = gpsn) {
gpsn = gps->next;
-
- if (gps->palcolor == palcolor) {
+ gps_palcolor = BKE_palette_color_getbyname(gps->palette, gps->colorname);
+ if (gps_palcolor == palcolor) {
if (gps->points) {
BKE_gpencil_free_stroke_weights(gps);
MEM_freeN(gps->points);
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 361c651a219..2c81e62676e 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6390,18 +6390,8 @@ static void lib_link_gpencil(FileData *fd, Main *main)
{
/* Build up hash of colors to assign later to strokes, for faster lookups */
int palette_count = BLI_listbase_count(&main->palettes);
- GHash **gp_palettecolors_buffer = MEM_mallocN(sizeof(struct GHash *) * palette_count, "Hash Palettes Array");
int i = 0;
- for (Palette *palette = main->palettes.first; palette; palette = palette->id.next, i++) {
- gp_palettecolors_buffer[i] = BLI_ghash_str_new("GPencil Hash Colors");
- for (PaletteColor *palcolor = palette->colors.first; palcolor; palcolor = palcolor->next) {
- if (BLI_ghash_lookup(gp_palettecolors_buffer[i], palcolor->info) == NULL) {
- BLI_ghash_insert(gp_palettecolors_buffer[i], palcolor->info, palcolor);
- }
- }
- }
-
/* Relink all datablock linked by GP datablock */
for (bGPdata *gpd = main->gpencil.first; gpd; gpd = gpd->id.next) {
if (gpd->id.tag & LIB_TAG_NEED_LINK) {
@@ -6420,27 +6410,6 @@ static void lib_link_gpencil(FileData *fd, Main *main)
/* Relink palette */
gps->palette = newlibadr(fd, gpd->id.lib, gps->palette);
- /* Relink color
- * The Palette colors are pointers to a listbase inside the Palette datablock.
- * The pointers have to be re-assigned on file open. We use a hash to do this faster.
- */
- /* XXX: Usually, we'd relink the actual colours in direct_link_*() instead, but since
- * these pointers actually come from the Palette datablock (which we only resolve here),
- * it's probably better to do this here
- */
- i = BLI_findindex(&main->palettes, gps->palette);
- if (i > -1) {
- gps->palcolor = BLI_ghash_lookup(gp_palettecolors_buffer[i], gps->colorname);
- if (gps->palcolor == NULL) {
- gps->palcolor = BKE_palette_color_add_name(gps->palette, gps->colorname);
- /* Set to a different color. */
- ARRAY_SET_ITEMS(gps->palcolor->rgb, 1.0f, 0.0f, 1.0f, 1.0f);
- /* add to hash for avoiding create again */
- BLI_ghash_insert(gp_palettecolors_buffer[i], gps->palcolor->info, gps->palcolor);
- }
- }
-
-
/* XXX: Temporary version-patching code for early 2.8 files without any palette slots */
if (i >= 0) palettes_needed[i] = true;
}
@@ -6471,15 +6440,6 @@ static void lib_link_gpencil(FileData *fd, Main *main)
gpd->id.tag &= ~LIB_TAG_NEED_LINK;
}
}
-
- /* Free palette-color hash buffer */
- for (i = 0; i < palette_count; ++i) {
- if (gp_palettecolors_buffer[i]) {
- BLI_ghash_free(gp_palettecolors_buffer[i], NULL, NULL);
- gp_palettecolors_buffer[i] = NULL;
- }
- }
- MEM_SAFE_FREE(gp_palettecolors_buffer);
}
/* relinks grease-pencil data - used for direct_link and old file linkage */
diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c
index d1542945315..d2c9215ef1d 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -1430,7 +1430,6 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
/* set stroke to palette and force recalculation */
BLI_strncpy(gps->colorname, gpl->info, sizeof(gps->colorname));
- gps->palcolor = NULL;
gps->flag |= GP_STROKE_RECALC_COLOR;
gps->thickness = gpl->thickne
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list