[Bf-blender-cvs] [57d9b81388c] temp-greasepencil-vfx: Cleanup and code reorganization

Antonio Vazquez noreply at git.blender.org
Thu Jun 28 12:11:27 CEST 2018


Commit: 57d9b81388cccdeb36e3bfcdc8edae9ea99cd089
Author: Antonio Vazquez
Date:   Thu Jun 28 12:11:20 2018 +0200
Branches: temp-greasepencil-vfx
https://developer.blender.org/rB57d9b81388cccdeb36e3bfcdc8edae9ea99cd089

Cleanup and code reorganization

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

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_shader_fx.c

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

diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 6ba517dd369..c5cb911bd71 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -55,25 +55,12 @@ extern char datatoc_gpencil_simple_mix_frag_glsl[];
 extern char datatoc_gpencil_point_vert_glsl[];
 extern char datatoc_gpencil_point_geom_glsl[];
 extern char datatoc_gpencil_point_frag_glsl[];
-extern char datatoc_gpencil_gaussian_blur_frag_glsl[];
-extern char datatoc_gpencil_wave_frag_glsl[];
-extern char datatoc_gpencil_pixel_frag_glsl[];
-extern char datatoc_gpencil_swirl_frag_glsl[];
-extern char datatoc_gpencil_flip_frag_glsl[];
-extern char datatoc_gpencil_light_frag_glsl[];
 extern char datatoc_gpencil_background_frag_glsl[];
 extern char datatoc_gpencil_paper_frag_glsl[];
 extern char datatoc_gpencil_edit_point_vert_glsl[];
 extern char datatoc_gpencil_edit_point_geom_glsl[];
 extern char datatoc_gpencil_edit_point_frag_glsl[];
 
-extern char datatoc_gpencil_fx_blur_frag_glsl[];
-extern char datatoc_gpencil_fx_flip_frag_glsl[];
-extern char datatoc_gpencil_fx_light_frag_glsl[];
-extern char datatoc_gpencil_fx_pixel_frag_glsl[];
-extern char datatoc_gpencil_fx_swirl_frag_glsl[];
-extern char datatoc_gpencil_fx_wave_frag_glsl[];
-
 /* *********** STATIC *********** */
 static GPENCIL_e_data e_data = {NULL}; /* Engine data */
 
@@ -219,47 +206,6 @@ static void GPENCIL_create_shaders(void)
 	}
 }
 
-static void GPENCIL_create_fx_shaders(void)
-{
-	/* fx shaders (all in screen space) */
-	if (!e_data.gpencil_fx_blur_sh) {
-		e_data.gpencil_fx_blur_sh = DRW_shader_create_fullscreen(datatoc_gpencil_fx_blur_frag_glsl, NULL);
-	}
-	if (!e_data.gpencil_fx_flip_sh) {
-		e_data.gpencil_fx_flip_sh = DRW_shader_create_fullscreen(datatoc_gpencil_fx_flip_frag_glsl, NULL);
-	}
-	if (!e_data.gpencil_fx_light_sh) {
-		e_data.gpencil_fx_light_sh = DRW_shader_create_fullscreen(datatoc_gpencil_fx_light_frag_glsl, NULL);
-	}
-	if (!e_data.gpencil_fx_pixel_sh) {
-		e_data.gpencil_fx_pixel_sh = DRW_shader_create_fullscreen(datatoc_gpencil_fx_pixel_frag_glsl, NULL);
-	}
-	if (!e_data.gpencil_fx_swirl_sh) {
-		e_data.gpencil_fx_swirl_sh = DRW_shader_create_fullscreen(datatoc_gpencil_fx_swirl_frag_glsl, NULL);
-	}
-	if (!e_data.gpencil_fx_wave_sh) {
-		e_data.gpencil_fx_wave_sh = DRW_shader_create_fullscreen(datatoc_gpencil_fx_wave_frag_glsl, NULL);
-	}
-}
-
-static void GPENCIL_create_fx_passes(GPENCIL_PassList *psl)
-{
-	DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND |
-					 DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS;
-	/* FX passes */
-	psl->fx_blur_pass = DRW_pass_create("GPencil FX Blur Pass", state);
-
-	psl->fx_flip_pass = DRW_pass_create("GPencil FX Flip Pass", state);
-
-	psl->fx_light_pass = DRW_pass_create("GPencil FX Light Pass", state);
-
-	psl->fx_pixel_pass = DRW_pass_create("GPencil FX Pixel Pass", state);
-
-	psl->fx_swirl_pass = DRW_pass_create("GPencil FX Swirl Pass", state);
-
-	psl->fx_wave_pass = DRW_pass_create("GPencil FX Wave Pass", state);
-}
-
 void GPENCIL_engine_init(void *vedata)
 {
 	GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
@@ -278,7 +224,7 @@ void GPENCIL_engine_init(void *vedata)
 
 	/* create shaders */
 	GPENCIL_create_shaders();
-	GPENCIL_create_fx_shaders();
+	GPENCIL_create_fx_shaders(&e_data);
 
 	/* blank texture used if no texture defined for fill shader */
 	if (!e_data.gpencil_blank_texture) {
@@ -302,12 +248,7 @@ static void GPENCIL_engine_free(void)
 	DRW_TEXTURE_FREE_SAFE(e_data.gpencil_blank_texture);
 
 	/* effects */
-	DRW_SHADER_FREE_SAFE(e_data.gpencil_fx_blur_sh);
-	DRW_SHADER_FREE_SAFE(e_data.gpencil_fx_flip_sh);
-	DRW_SHADER_FREE_SAFE(e_data.gpencil_fx_light_sh);
-	DRW_SHADER_FREE_SAFE(e_data.gpencil_fx_pixel_sh);
-	DRW_SHADER_FREE_SAFE(e_data.gpencil_fx_swirl_sh);
-	DRW_SHADER_FREE_SAFE(e_data.gpencil_fx_wave_sh);
+	GPENCIL_delete_fx_shaders(&e_data);
 }
 
 void GPENCIL_cache_init(void *vedata)
@@ -446,7 +387,7 @@ void GPENCIL_cache_init(void *vedata)
 		DRW_shgroup_uniform_int(mix_shgrp, "tonemapping", &stl->storage->tonemapping, 1);
 
 		/* mix pass no blend used to copy between passes. A separated pass is required
-		 * because if the mix pass is used, the acumulation of blend degrade the colors.
+		 * because if mix_pass is used, the acumulation of blend degrade the colors.
 		 *
 		 * This pass is used too to take the snapshot used for background_pass. This image
 		 * will be used as the background while the user is drawing.
@@ -460,7 +401,7 @@ void GPENCIL_cache_init(void *vedata)
 
 		/* Painting session pass (used only to speedup while the user is drawing )
 		 * This pass is used to show the snapshot of the current grease pencil strokes captured
-		 * when the user starts to draw.
+		 * when the user starts to draw (see comments above).
 		 * In this way, the previous strokes don't need to be redraw and the drawing process
 		 * is far to agile.
 		 */
@@ -471,7 +412,7 @@ void GPENCIL_cache_init(void *vedata)
 		DRW_shgroup_uniform_texture_ref(background_shgrp, "strokeDepth", &e_data.background_depth_tx);
 
 		/* pass for drawing paper (only if viewport)
-		 * In render, the v3d is null
+		 * In render, the v3d is null so the paper is disabled
 		 * The paper is way to isolate the drawing in complex scene and to have a cleaner
 		 * drawing area.
 		 */
@@ -496,7 +437,7 @@ void GPENCIL_cache_init(void *vedata)
 			DRW_shgroup_uniform_int(paper_shgrp, "uselines", &stl->storage->uselines, 1);
 		}
 
-		/* effects passes */
+		/* create effects passes */
 		GPENCIL_create_fx_passes(psl);
 	}
 }
@@ -575,12 +516,11 @@ void GPENCIL_cache_finish(void *vedata)
 			if (stl->storage->is_render == true) {
 				gpd->flag |= GP_DATA_CACHE_IS_DIRTY;
 			}
-			/* FX pass */
+			/* FX passses */
 			tGPencilObjectCache *cache = &stl->g_data->gp_object_cache[i];
-			if ((!is_multiedit) && (ob->shader_fx.first)) {
+			if (!is_multiedit) {
 				DRW_gpencil_fx_prepare(&e_data, vedata, cache);
 			}
-
 		}
 	}
 }
@@ -596,8 +536,8 @@ static int gpencil_object_cache_compare_zdepth(const void *a1, const void *a2)
 	return 0;
 }
 
-/* prepare a texture with full viewport for fast drawing */
-static void gpencil_prepare_fast_drawing(GPENCIL_StorageList *stl, DefaultFramebufferList *dfbl, GPENCIL_FramebufferList *fbl, DRWPass *pass, float clearcol[4])
+/* prepare a texture with full viewport screenshot for fast drawing */
+static void gpencil_prepare_fast_drawing(GPENCIL_StorageList *stl, DefaultFramebufferList *dfbl, GPENCIL_FramebufferList *fbl, DRWPass *pass, const float clearcol[4])
 {
 	if (stl->g_data->session_flag & (GP_DRW_PAINT_IDLE | GP_DRW_PAINT_FILLING)) {
 		GPU_framebuffer_bind(fbl->background_fb);
@@ -645,7 +585,7 @@ void GPENCIL_draw_scene(void *ved)
 
 	int init_grp, end_grp;
 	tGPencilObjectCache *cache;
-	float clearcol[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
+	const float clearcol[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
 
 	const DRWContextState *draw_ctx = DRW_context_state_get();
 	View3D *v3d = draw_ctx->v3d;
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h
index 4278fa7073a..0acb86a5702 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -347,6 +347,10 @@ struct GpencilBatchCache *gpencil_batch_cache_get(struct Object *ob, int cfra);
 void gpencil_instance_modifiers(struct GPENCIL_StorageList *stl, struct Object *ob);
 
 /* effects */
+void GPENCIL_create_fx_shaders(struct GPENCIL_e_data *e_data);
+void GPENCIL_delete_fx_shaders(struct GPENCIL_e_data *e_data);
+void GPENCIL_create_fx_passes(struct GPENCIL_PassList *psl);
+
 void DRW_gpencil_fx_prepare(
 	struct GPENCIL_e_data *e_data, struct GPENCIL_Data *vedata,
 	struct tGPencilObjectCache *cache);
diff --git a/source/blender/draw/engines/gpencil/gpencil_shader_fx.c b/source/blender/draw/engines/gpencil/gpencil_shader_fx.c
index e609b4f58f4..f01d37af42c 100644
--- a/source/blender/draw/engines/gpencil/gpencil_shader_fx.c
+++ b/source/blender/draw/engines/gpencil/gpencil_shader_fx.c
@@ -41,6 +41,13 @@
 
 #include "gpencil_engine.h"
 
+extern char datatoc_gpencil_fx_blur_frag_glsl[];
+extern char datatoc_gpencil_fx_flip_frag_glsl[];
+extern char datatoc_gpencil_fx_light_frag_glsl[];
+extern char datatoc_gpencil_fx_pixel_frag_glsl[];
+extern char datatoc_gpencil_fx_swirl_frag_glsl[];
+extern char datatoc_gpencil_fx_wave_frag_glsl[];
+
 /* verify if this fx is active */
 static bool effect_is_active(Object *ob, ShaderFxData *fx, bool is_render)
 {
@@ -421,6 +428,61 @@ static void DRW_gpencil_fx_wave(
 
 /* ************************************************************** */
 
+/* create all FX shaders */
+void GPENCIL_create_fx_shaders(GPENCIL_e_data *e_data)
+{
+	/* fx shaders (all in screen space) */
+	if (!e_data->gpencil_fx_blur_sh) {
+		e_data->gpencil_fx_blur_sh = DRW_shader_create_fullscreen(datatoc_gpencil_fx_blur_frag_glsl, NULL);
+	}
+	if (!e_data->gpencil_fx_flip_sh) {
+		e_data->gpencil_fx_flip_sh = DRW_shader_create_fullscreen(datatoc_gpencil_fx_flip_frag_glsl, NULL);
+	}
+	if (!e_data->gpencil_fx_light_sh) {
+		e_data->gpencil_fx_light_sh = DRW_shader_create_fullscreen(datatoc_gpencil_fx_light_frag_glsl, NULL);
+	}
+	if (!e_data->gpencil_fx_pixel_sh) {
+		e_data->gpencil_fx_pixel_sh = DRW_shader_create_fullscreen(datatoc_gpencil_fx_pixel_frag_glsl, NULL);
+	}
+	if (!e_data->gpencil_fx_swirl_sh) {
+		e_data->gpencil_fx_swirl_sh = DRW_shader_create_fullscreen(datatoc_gpencil_fx_swirl_frag_glsl, NULL);
+	}
+	if (!e_data->gpencil_fx_wave_sh) {
+		e_data->gpencil_fx_wave_sh = DRW_shader_create_fullscreen(datatoc_gpencil_fx_wave_frag_glsl, NULL);
+	}
+}
+
+/* free FX shaders */
+void GPENCIL_delete_fx_shaders(GPENCIL_e_data *e_data)
+{
+	DRW_SHADER_FREE_SAFE(e_data->gpencil_fx_blur_sh);
+	DRW_SHADER_FREE_SAFE(e_data->gpencil_fx_flip_sh);
+	DRW_SHADER_FREE_SAFE(e_data->gpencil_fx_light_sh);
+	DRW_SHADER_FREE_SAFE(e_data->gpencil_fx_pixel_sh);
+	DRW_SHADER_FREE_SAFE(e_data->gpencil_fx_swirl_sh);
+	DRW_SHADER_FREE_SAFE(e_data->gpencil_fx_wave_sh);
+}
+
+/* create all passes used by FX */
+void GPE

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list