[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