[Bf-blender-cvs] [5396e284f7d] greasepencil-object: WIP: First step to remove Palettes from Draw Manager

Antonio Vazquez noreply at git.blender.org
Thu Apr 26 12:35:49 CEST 2018


Commit: 5396e284f7dabc6d63466967abc6d103965ec0ef
Author: Antonio Vazquez
Date:   Tue Apr 24 19:14:07 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rB5396e284f7dabc6d63466967abc6d103965ec0ef

WIP: First step to remove Palettes from Draw Manager

Still is not working.

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

M	source/blender/blenkernel/BKE_material.h
M	source/blender/blenkernel/intern/material.c
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_engine.h
M	source/blender/draw/engines/gpencil/gpencil_geom.c

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

diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h
index 43f36618c19..71b07618db1 100644
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@ -79,6 +79,7 @@ enum {
 };
 
 struct Material *give_current_material(struct Object *ob, short act);
+struct GpencilColorData *give_material_gpencil_settings(struct Object *ob, short act);
 void assign_material_id(struct ID *id, struct Material *ma, short act);
 void assign_material(struct Object *ob, struct Material *ma, short act, int assign_type);
 void assign_matarar(struct Object *ob, struct Material ***matar, short totcol);
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index e06cb082715..27b5d02ad86 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -523,6 +523,17 @@ Material *give_current_material(Object *ob, short act)
 	return ma;
 }
 
+GpencilColorData *give_material_gpencil_settings(Object *ob, short act)
+{
+	Material *ma = give_current_material(ob, act);
+	if (ma != NULL) {
+		return &ma->gpcolor;
+	}
+	else {
+		return NULL;
+	}
+}
+
 Material *give_node_material(Material *ma)
 {
 	if (ma && ma->use_nodes && ma->nodetree) {
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 10a956abea6..f72ee41dd0f 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -31,12 +31,14 @@
 #include "BKE_gpencil.h"
 #include "BKE_image.h"
 #include "BKE_lattice.h"
+#include "BKE_material.h"
 #include "BKE_paint.h"
 
 #include "ED_gpencil.h"
 #include "ED_view3d.h"
 
 #include "DNA_gpencil_types.h"
+#include "DNA_material_types.h"
 #include "DNA_view3d_types.h"
 #include "DNA_modifier_types.h"
 
@@ -54,7 +56,7 @@
 
 /* create shading group for filling */
 static DRWShadingGroup *DRW_gpencil_shgroup_fill_create(GPENCIL_e_data *e_data, GPENCIL_Data *vedata, DRWPass *pass, 
-	GPUShader *shader, bGPdata *gpd, PaletteColor *palcolor, int id)
+	GPUShader *shader, bGPdata *gpd, GpencilColorData *palcolor, int id)
 {
 	GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
 
@@ -79,15 +81,15 @@ static DRWShadingGroup *DRW_gpencil_shgroup_fill_create(GPENCIL_e_data *e_data,
 	DRW_shgroup_uniform_vec2(grp, "t_offset", palcolor->t_offset, 1);
 	DRW_shgroup_uniform_float(grp, "t_opacity", &palcolor->t_opacity, 1);
 
-	stl->shgroups[id].t_mix = palcolor->flag & PAC_COLOR_TEX_MIX ? 1 : 0;
+	stl->shgroups[id].t_mix = palcolor->flag & GPC_COLOR_TEX_MIX ? 1 : 0;
 	DRW_shgroup_uniform_int(grp, "t_mix", &stl->shgroups[id].t_mix, 1);
 
-	stl->shgroups[id].t_flip = palcolor->flag & PAC_COLOR_FLIP_FILL ? 1 : 0;
+	stl->shgroups[id].t_flip = palcolor->flag & GPC_COLOR_FLIP_FILL ? 1 : 0;
 	DRW_shgroup_uniform_int(grp, "t_flip", &stl->shgroups[id].t_flip, 1);
 
 	DRW_shgroup_uniform_int(grp, "xraymode", (const int *) &gpd->xray_mode, 1);
 	/* image texture */
-	if ((palcolor->fill_style == FILL_STYLE_TEXTURE) || (palcolor->fill_style == FILL_STYLE_PATTERN) || (palcolor->flag & PAC_COLOR_TEX_MIX)) {
+	if ((palcolor->fill_style == GPC_FILL_STYLE_TEXTURE) || (palcolor->fill_style == GPC_FILL_STYLE_PATTERN) || (palcolor->flag & GPC_COLOR_TEX_MIX)) {
 		ImBuf *ibuf;
 		Image *image = palcolor->ima;
 		ImageUser iuser = { NULL };
@@ -104,7 +106,7 @@ static DRWShadingGroup *DRW_gpencil_shgroup_fill_create(GPENCIL_e_data *e_data,
 			GPUTexture *texture = GPU_texture_from_blender(palcolor->ima, &iuser, GL_TEXTURE_2D, true, 0.0, 0);
 			DRW_shgroup_uniform_texture(grp, "myTexture", texture);
 
-			stl->shgroups[id].t_clamp = palcolor->flag & PAC_COLOR_TEX_CLAMP ? 1 : 0;
+			stl->shgroups[id].t_clamp = palcolor->flag & GPC_COLOR_TEX_CLAMP ? 1 : 0;
 			DRW_shgroup_uniform_int(grp, "t_clamp", &stl->shgroups[id].t_clamp, 1);
 
 			BKE_image_release_ibuf(image, ibuf, NULL);
@@ -122,7 +124,7 @@ static DRWShadingGroup *DRW_gpencil_shgroup_fill_create(GPENCIL_e_data *e_data,
 
 /* create shading group for strokes */
 DRWShadingGroup *DRW_gpencil_shgroup_stroke_create(GPENCIL_e_data *e_data, GPENCIL_Data *vedata, DRWPass *pass, GPUShader *shader, Object *ob,
-	bGPdata *gpd, PaletteColor *palcolor, int id, bool onion)
+	bGPdata *gpd, GpencilColorData *palcolor, int id, bool onion)
 {
 	GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
 	const float *viewport_size = DRW_viewport_size_get();
@@ -153,9 +155,9 @@ DRWShadingGroup *DRW_gpencil_shgroup_stroke_create(GPENCIL_e_data *e_data, GPENC
 
 		stl->shgroups[id].stroke_style = palcolor->stroke_style;
 		stl->shgroups[id].color_type = GPENCIL_COLOR_SOLID;
-		if ((palcolor->stroke_style == STROKE_STYLE_TEXTURE) && (!onion)) {
+		if ((palcolor->stroke_style == GPC_STROKE_STYLE_TEXTURE) && (!onion)) {
 			stl->shgroups[id].color_type = GPENCIL_COLOR_TEXTURE;
-			if (palcolor->flag & PAC_COLOR_PATTERN) {
+			if (palcolor->flag & GPC_COLOR_PATTERN) {
 				stl->shgroups[id].color_type = GPENCIL_COLOR_PATTERN;
 			}
 		}
@@ -186,7 +188,7 @@ DRWShadingGroup *DRW_gpencil_shgroup_stroke_create(GPENCIL_e_data *e_data, GPENC
 	}
 
 	/* image texture for pattern */
-	if ((palcolor) && (palcolor->stroke_style == STROKE_STYLE_TEXTURE) && (!onion)) {
+	if ((palcolor) && (palcolor->stroke_style == GPC_STROKE_STYLE_TEXTURE) && (!onion)) {
 		ImBuf *ibuf;
 		Image *image = palcolor->sima;
 		ImageUser iuser = { NULL };
@@ -217,7 +219,7 @@ DRWShadingGroup *DRW_gpencil_shgroup_stroke_create(GPENCIL_e_data *e_data, GPENC
 
 /* create shading group for volumetrics */
 static DRWShadingGroup *DRW_gpencil_shgroup_point_create(GPENCIL_e_data *e_data, GPENCIL_Data *vedata, DRWPass *pass, GPUShader *shader, Object *ob,
-	bGPdata *gpd, PaletteColor *palcolor, int id, bool onion)
+	bGPdata *gpd, GpencilColorData *palcolor, int id, bool onion)
 {
 	GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
 	const float *viewport_size = DRW_viewport_size_get();
@@ -246,9 +248,9 @@ static DRWShadingGroup *DRW_gpencil_shgroup_point_create(GPENCIL_e_data *e_data,
 		stl->shgroups[id].mode = palcolor->mode;
 		stl->shgroups[id].stroke_style = palcolor->stroke_style;
 		stl->shgroups[id].color_type = GPENCIL_COLOR_SOLID;
-		if ((palcolor->stroke_style == STROKE_STYLE_TEXTURE) && (!onion)) {
+		if ((palcolor->stroke_style == GPC_STROKE_STYLE_TEXTURE) && (!onion)) {
 			stl->shgroups[id].color_type = GPENCIL_COLOR_TEXTURE;
-			if (palcolor->flag & PAC_COLOR_PATTERN) {
+			if (palcolor->flag & GPC_COLOR_PATTERN) {
 				stl->shgroups[id].color_type = GPENCIL_COLOR_PATTERN;
 			}
 		}
@@ -282,7 +284,7 @@ static DRWShadingGroup *DRW_gpencil_shgroup_point_create(GPENCIL_e_data *e_data,
 	}
 
 	/* image texture */
-	if ((palcolor) && (palcolor->stroke_style == STROKE_STYLE_TEXTURE) && (!onion)) {
+	if ((palcolor) && (palcolor->stroke_style == GPC_STROKE_STYLE_TEXTURE) && (!onion)) {
 		ImBuf *ibuf;
 		Image *image = palcolor->sima;
 		ImageUser iuser = { NULL };
@@ -315,7 +317,7 @@ static void gpencil_add_fill_shgroup(GpencilBatchCache *cache, DRWShadingGroup *
 	Object *ob, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps,
 	const float tintcolor[4], const bool onion, const bool custonion)
 {
-	PaletteColor *gps_palcolor = BKE_palette_color_getbyname(gps->palette, gps->colorname);
+	GpencilColorData *gps_palcolor = give_material_gpencil_settings(ob, gps->mat_nr + 1);
 	if (gps->totpoints >= 3) {
 		float tfill[4];
 		/* set color using palette, tint color and opacity */
@@ -352,9 +354,9 @@ static void gpencil_add_stroke_shgroup(GpencilBatchCache *cache, DRWShadingGroup
 	float tcolor[4];
 	float ink[4];
 	short sthickness;
-	PaletteColor *gps_palcolor = BKE_palette_color_getbyname(gps->palette, gps->colorname);
+	GpencilColorData *gps_palcolor = give_material_gpencil_settings(ob, gps->mat_nr + 1);
 
-	/* set color using palette, tint color and opacity */
+	/* set color using base color, tint color and opacity */
 	if (!onion) {
 		/* if special stroke, use fill color as stroke color */
 		if (gps->flag & GP_STROKE_NOFILL) {
@@ -381,7 +383,7 @@ static void gpencil_add_stroke_shgroup(GpencilBatchCache *cache, DRWShadingGroup
 	CLAMP_MIN(sthickness, 1);
 	if (cache->is_dirty) {
 		gpencil_batch_cache_check_free_slots(ob);
-		if ((gps->totpoints > 1) && (gps_palcolor->mode  == PAC_MODE_LINE)) {
+		if ((gps->totpoints > 1) && (gps_palcolor->mode  == GPC_MODE_LINE)) {
 			cache->batch_stroke[cache->cache_idx] = DRW_gpencil_get_stroke_geom(gpf, gps, sthickness, ink);
 		}
 		else {
@@ -396,7 +398,7 @@ static void gpencil_add_editpoints_shgroup(
 		GPENCIL_StorageList *stl, GpencilBatchCache *cache,ToolSettings *ts, Object *ob, 
 		bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps)
 {
-	PaletteColor *gps_palcolor = BKE_palette_color_getbyname(gps->palette, gps->colorname);
+	GpencilColorData *gps_palcolor = give_material_gpencil_settings(ob, gps->mat_nr + 1);
 
 	if (GPENCIL_ANY_EDIT_MODE(gpd)) {
 		const DRWContextState *draw_ctx = DRW_context_state_get();
@@ -418,7 +420,7 @@ static void gpencil_add_editpoints_shgroup(
 		}
 		/* edit points */
 		if ((gps->flag & GP_STROKE_SELECT) || (is_weight_paint)) {
-			if ((gpl->flag & GP_LAYER_UNLOCK_COLOR) || ((gps_palcolor->flag & PC_COLOR_LOCKED) == 0)) {
+			if ((gpl->flag & GP_LAYER_UNLOCK_COLOR) || ((gps_palcolor->flag & GPC_COLOR_LOCKED) == 0)) {
 				if (cache->is_dirty) {
 					gpencil_batch_cache_check_free_slots(ob);
 					cache->batch_edit[cache->cache_idx] = DRW_gpencil_get_edit_geom(gps, ts->gp_sculpt.alpha, gpd->flag);
@@ -448,13 +450,13 @@ static void gpencil_draw_onion_strokes(GpencilBatchCache *cache, GPENCIL_e_data
 
 	for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
 		
-		PaletteColor *gps_palcolor = BKE_palette_color_getbyname(gps->palette, gps->colorname);
+		GpencilColorData *gps_palcolor = give_material_gpencil_settings(ob, gps->mat_nr + 1);
 		copy_v4_v4(gps->tmp_rgb, gps_palcolor->rgb);
 		copy_v4_v4(gps->tmp_fill, gps_palcolor->fill);
 
 		int id = stl->storage->shgroup_id;
 		/* check if stroke can be drawn */
-		if (gpencil_can_draw_stroke(gps, true) == false) {
+		if

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list