[Bf-blender-cvs] [834730e1237] greasepencil-object: Separate in different passes

Antonio Vazquez noreply at git.blender.org
Fri Apr 14 19:47:36 CEST 2017


Commit: 834730e1237d62c25829b56fc342ad7e6004d885
Author: Antonio Vazquez
Date:   Fri Apr 14 19:47:27 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB834730e1237d62c25829b56fc342ad7e6004d885

Separate in different passes

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

M	source/blender/draw/engines/gpencil/gpencil_mode.c

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

diff --git a/source/blender/draw/engines/gpencil/gpencil_mode.c b/source/blender/draw/engines/gpencil/gpencil_mode.c
index 028ed3072c3..6b0840a4255 100644
--- a/source/blender/draw/engines/gpencil/gpencil_mode.c
+++ b/source/blender/draw/engines/gpencil/gpencil_mode.c
@@ -66,7 +66,9 @@ typedef struct GPENCIL_StorageList {
 
 /* keep it under MAX_PASSES */
 typedef struct GPENCIL_PassList {
-	struct DRWPass *pass;
+	struct DRWPass *stroke_pass;
+	struct DRWPass *fill_pass;
+	struct DRWPass *edit_pass;
 } GPENCIL_PassList;
 
 /* keep it under MAX_BUFFERS */
@@ -89,7 +91,7 @@ typedef struct GPENCIL_Data {
 
 /* *********** STATIC *********** */
 typedef struct g_data{
-	DRWShadingGroup *shgrps_volumetric;
+	DRWShadingGroup *shgrps_edit_volumetric;
 } g_data; /* Transient data */
 
 static struct {
@@ -180,7 +182,7 @@ static DRWShadingGroup *GPENCIL_shgroup_stroke_create(GPENCIL_Data *vedata, DRWP
 }
 
 /* create shading group for volumetric */
-static DRWShadingGroup *GPENCIL_shgroup_volumetric_create(GPENCIL_Data *vedata, DRWPass *pass)
+static DRWShadingGroup *GPENCIL_shgroup_edit_volumetric_create(GPENCIL_Data *vedata, DRWPass *pass)
 {
 	GPENCIL_TextureList *txl = ((GPENCIL_Data *)vedata)->txl;
 	GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
@@ -207,16 +209,18 @@ static void GPENCIL_cache_init(void *vedata)
 	}
 
 	{
-		/* Create a pass */
+		/* Stroke pass */
 		DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND ;
-		psl->pass = DRW_pass_create("Gpencil Pass", state);
+		psl->stroke_pass = DRW_pass_create("Gpencil Stroke Pass", state);
+		psl->fill_pass = DRW_pass_create("Gpencil Fill Pass", state);
 		stl->storage->pal_id = 0;
 		memset(stl->storage->shgrps_fill, 0, sizeof(DRWShadingGroup *) * MAX_GPENCIL_MAT);
 		memset(stl->storage->shgrps_stroke, 0, sizeof(DRWShadingGroup *) * MAX_GPENCIL_MAT);
 		memset(stl->storage->materials, 0, sizeof(PaletteColor *) * MAX_GPENCIL_MAT);
 
-		/* create static shading groups */
-		stl->g_data->shgrps_volumetric = GPENCIL_shgroup_volumetric_create(vedata, psl->pass);
+		/* edit pass */
+		psl->edit_pass = DRW_pass_create("Gpencil Edit Pass", state);
+		stl->g_data->shgrps_edit_volumetric = GPENCIL_shgroup_edit_volumetric_create(vedata, psl->edit_pass);
 	}
 }
 
@@ -273,8 +277,8 @@ static void gpencil_draw_strokes(void *vedata, ToolSettings *ts, Object *ob,
 		if (id == -1) {
 			id = stl->storage->pal_id;
 			stl->storage->materials[id] = gps->palcolor;
-			stl->storage->shgrps_fill[id] = GPENCIL_shgroup_fill_create(vedata, psl->pass, gps->palcolor, id);
-			stl->storage->shgrps_stroke[id] = GPENCIL_shgroup_stroke_create(vedata, psl->pass, gps->palcolor);
+			stl->storage->shgrps_fill[id] = GPENCIL_shgroup_fill_create(vedata, psl->fill_pass, gps->palcolor, id);
+			stl->storage->shgrps_stroke[id] = GPENCIL_shgroup_stroke_create(vedata, psl->stroke_pass, gps->palcolor);
 			++stl->storage->pal_id;
 		}
 
@@ -334,7 +338,7 @@ static void gpencil_draw_strokes(void *vedata, ToolSettings *ts, Object *ob,
 			if (gps->flag & GP_STROKE_SELECT) {
 				if ((gpl->flag & GP_LAYER_UNLOCK_COLOR) || ((gps->palcolor->flag & PC_COLOR_LOCKED) == 0)) {
 					struct Batch *edit_geom = gpencil_get_edit_geom(gps, ts->gp_sculpt.alpha, ob->gpd->flag);
-					DRW_shgroup_call_add(stl->g_data->shgrps_volumetric, edit_geom, gpf->matrix);
+					DRW_shgroup_call_add(stl->g_data->shgrps_edit_volumetric, edit_geom, gpf->matrix);
 
 				}
 			}
@@ -392,7 +396,9 @@ static void GPENCIL_draw_scene(void *vedata)
 
 	UNUSED_VARS(fbl, dfbl, dtxl);
 	if (stl->storage->pal_id > 0) {
-		DRW_draw_pass(psl->pass);
+		DRW_draw_pass(psl->fill_pass);
+		DRW_draw_pass(psl->stroke_pass);
+		DRW_draw_pass(psl->edit_pass);
 	}
 }




More information about the Bf-blender-cvs mailing list