[Bf-blender-cvs] [96b41a2c7f3] greasepencil-object: Change Blur algorithm

Antonio Vazquez noreply at git.blender.org
Mon Aug 14 16:59:56 CEST 2017


Commit: 96b41a2c7f3cd3587f234d3ed5133fa8a025c7b8
Author: Antonio Vazquez
Date:   Mon Aug 14 16:19:18 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB96b41a2c7f3cd3587f234d3ed5133fa8a025c7b8

Change Blur algorithm

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

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_vfx.c
M	source/blender/draw/engines/gpencil/shaders/gpencil_gaussian_blur_frag.glsl

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

diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index fbb051090d2..ea4a9f042c0 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -130,8 +130,6 @@ static void GPENCIL_engine_init(void *vedata)
 	}
 
 	unit_m4(stl->storage->unit_matrix);
-	ARRAY_SET_ITEMS(stl->storage->blur1, 1.0f, 0.0f); /* horz */
-	ARRAY_SET_ITEMS(stl->storage->blur2, 0.0f, 1.0f); /* vert */
 
 	/* blank texture used if no texture defined for fill shader */
 	if (!e_data.gpencil_blank_texture) {
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h
index b663c4b4e1e..05bbfadd015 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -102,7 +102,6 @@ typedef struct GPENCIL_Storage {
 	int xray;
 	int keep_size;
 	float obj_scale;
-	float blur1[2], blur2[2];
 	int pixfactor;
 } GPENCIL_Storage;
 
diff --git a/source/blender/draw/engines/gpencil/gpencil_vfx.c b/source/blender/draw/engines/gpencil/gpencil_vfx.c
index 35727280e25..95a2a34e72c 100644
--- a/source/blender/draw/engines/gpencil/gpencil_vfx.c
+++ b/source/blender/draw/engines/gpencil/gpencil_vfx.c
@@ -168,22 +168,14 @@ static void DRW_gpencil_vfx_blur(ModifierData *md, int ob_idx, GPENCIL_e_data *e
 	DRW_shgroup_call_add(vfx_shgrp, vfxquad, NULL);
 	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeColor", &e_data->vfx_fbcolor_color_tx_a);
 	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeDepth", &e_data->vfx_fbcolor_depth_tx_a);
-	DRW_shgroup_uniform_vec2(vfx_shgrp, "dir", stl->storage->blur1, 1);
-	DRW_shgroup_uniform_float(vfx_shgrp, "blur", &stl->vfx[ob_idx].vfx_blur.x, 1);
+	DRW_shgroup_uniform_float(vfx_shgrp, "blurx", &stl->vfx[ob_idx].vfx_blur.x, 1);
+	DRW_shgroup_uniform_float(vfx_shgrp, "blury", &stl->vfx[ob_idx].vfx_blur.y, 1);
 
 	/* set first effect sh */
 	if (cache->init_vfx_blur_sh_1 == NULL) {
 		cache->init_vfx_blur_sh_1 = vfx_shgrp;
 	}
 
-	/* vertical blur */
-	vfx_shgrp = DRW_shgroup_create(e_data->gpencil_vfx_blur_sh, psl->vfx_blur_pass_1);
-	DRW_shgroup_call_add(vfx_shgrp, vfxquad, NULL);
-	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeColor", &e_data->vfx_fbcolor_color_tx_a);
-	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeDepth", &e_data->vfx_fbcolor_depth_tx_a);
-	DRW_shgroup_uniform_vec2(vfx_shgrp, "dir", stl->storage->blur2, 1);
-	DRW_shgroup_uniform_float(vfx_shgrp, "blur", &stl->vfx[ob_idx].vfx_blur.y, 1);
-
 	/* set last effect sh */
 	cache->end_vfx_blur_sh_1 = vfx_shgrp;
 
@@ -193,22 +185,14 @@ static void DRW_gpencil_vfx_blur(ModifierData *md, int ob_idx, GPENCIL_e_data *e
 	DRW_shgroup_call_add(vfx_shgrp, vfxquad, NULL);
 	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeColor", &e_data->vfx_fbcolor_color_tx_b);
 	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeDepth", &e_data->vfx_fbcolor_depth_tx_b);
-	DRW_shgroup_uniform_vec2(vfx_shgrp, "dir", stl->storage->blur1, 1);
-	DRW_shgroup_uniform_float(vfx_shgrp, "blur", &stl->vfx[ob_idx].vfx_blur.x, 1);
+	DRW_shgroup_uniform_float(vfx_shgrp, "blurx", &stl->vfx[ob_idx].vfx_blur.x, 1);
+	DRW_shgroup_uniform_float(vfx_shgrp, "blury", &stl->vfx[ob_idx].vfx_blur.y, 1);
 
 	/* set first effect sh */
 	if (cache->init_vfx_blur_sh_2 == NULL) {
 		cache->init_vfx_blur_sh_2 = vfx_shgrp;
 	}
 
-	/* vertical blur */
-	vfx_shgrp = DRW_shgroup_create(e_data->gpencil_vfx_blur_sh, psl->vfx_blur_pass_2);
-	DRW_shgroup_call_add(vfx_shgrp, vfxquad, NULL);
-	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeColor", &e_data->vfx_fbcolor_color_tx_b);
-	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeDepth", &e_data->vfx_fbcolor_depth_tx_b);
-	DRW_shgroup_uniform_vec2(vfx_shgrp, "dir", stl->storage->blur2, 1);
-	DRW_shgroup_uniform_float(vfx_shgrp, "blur", &stl->vfx[ob_idx].vfx_blur.y, 1);
-
 	/* set last effect sh */
 	cache->end_vfx_blur_sh_2 = vfx_shgrp;
 
@@ -218,22 +202,14 @@ static void DRW_gpencil_vfx_blur(ModifierData *md, int ob_idx, GPENCIL_e_data *e
 	DRW_shgroup_call_add(vfx_shgrp, vfxquad, NULL);
 	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeColor", &e_data->vfx_fbcolor_color_tx_a);
 	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeDepth", &e_data->vfx_fbcolor_depth_tx_a);
-	DRW_shgroup_uniform_vec2(vfx_shgrp, "dir", stl->storage->blur1, 1);
-	DRW_shgroup_uniform_float(vfx_shgrp, "blur", &stl->vfx[ob_idx].vfx_blur.x, 1);
+	DRW_shgroup_uniform_float(vfx_shgrp, "blurx", &stl->vfx[ob_idx].vfx_blur.x, 1);
+	DRW_shgroup_uniform_float(vfx_shgrp, "blury", &stl->vfx[ob_idx].vfx_blur.y, 1);
 
 	/* set first effect sh */
 	if (cache->init_vfx_blur_sh_3 == NULL) {
 		cache->init_vfx_blur_sh_3 = vfx_shgrp;
 	}
 
-	/* vertical blur */
-	vfx_shgrp = DRW_shgroup_create(e_data->gpencil_vfx_blur_sh, psl->vfx_blur_pass_3);
-	DRW_shgroup_call_add(vfx_shgrp, vfxquad, NULL);
-	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeColor", &e_data->vfx_fbcolor_color_tx_a);
-	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeDepth", &e_data->vfx_fbcolor_depth_tx_a);
-	DRW_shgroup_uniform_vec2(vfx_shgrp, "dir", stl->storage->blur2, 1);
-	DRW_shgroup_uniform_float(vfx_shgrp, "blur", &stl->vfx[ob_idx].vfx_blur.y, 1);
-
 	/* set last effect sh */
 	cache->end_vfx_blur_sh_3 = vfx_shgrp;
 
@@ -243,22 +219,14 @@ static void DRW_gpencil_vfx_blur(ModifierData *md, int ob_idx, GPENCIL_e_data *e
 	DRW_shgroup_call_add(vfx_shgrp, vfxquad, NULL);
 	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeColor", &e_data->vfx_fbcolor_color_tx_b);
 	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeDepth", &e_data->vfx_fbcolor_depth_tx_b);
-	DRW_shgroup_uniform_vec2(vfx_shgrp, "dir", stl->storage->blur1, 1);
-	DRW_shgroup_uniform_float(vfx_shgrp, "blur", &stl->vfx[ob_idx].vfx_blur.x, 1);
+	DRW_shgroup_uniform_float(vfx_shgrp, "blurx", &stl->vfx[ob_idx].vfx_blur.x, 1);
+	DRW_shgroup_uniform_float(vfx_shgrp, "blury", &stl->vfx[ob_idx].vfx_blur.y, 1);
 
 	/* set first effect sh */
 	if (cache->init_vfx_blur_sh_4 == NULL) {
 		cache->init_vfx_blur_sh_4 = vfx_shgrp;
 	}
 
-	/* vertical blur */
-	vfx_shgrp = DRW_shgroup_create(e_data->gpencil_vfx_blur_sh, psl->vfx_blur_pass_4);
-	DRW_shgroup_call_add(vfx_shgrp, vfxquad, NULL);
-	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeColor", &e_data->vfx_fbcolor_color_tx_b);
-	DRW_shgroup_uniform_buffer(vfx_shgrp, "strokeDepth", &e_data->vfx_fbcolor_depth_tx_b);
-	DRW_shgroup_uniform_vec2(vfx_shgrp, "dir", stl->storage->blur2, 1);
-	DRW_shgroup_uniform_float(vfx_shgrp, "blur", &stl->vfx[ob_idx].vfx_blur.y, 1);
-
 	/* set last effect sh */
 	cache->end_vfx_blur_sh_4 = vfx_shgrp;
 }
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_gaussian_blur_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_gaussian_blur_frag.glsl
index ff5f0d2c3bc..af94ec4b615 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_gaussian_blur_frag.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_gaussian_blur_frag.glsl
@@ -4,8 +4,8 @@ out vec4 FragColor;
 uniform sampler2D strokeColor;
 uniform sampler2D strokeDepth;
 
-uniform float blur;
-uniform vec2 dir;
+uniform float blurx;
+uniform float blury;
 
 void main()
 {
@@ -13,21 +13,19 @@ void main()
 	float stroke_depth = texelFetch(strokeDepth, uv, 0).r;
 	gl_FragDepth = stroke_depth;
 
-	float hstep = dir.x;
-    float vstep = dir.y;
 	vec4 outcolor = vec4(0.0);
-	/* apply blurring, using a 9-tap filter with predefined gaussian weights (base on code written by Matt DesLauriers)*/
-    outcolor += texelFetch(strokeColor, ivec2(uv.x - 4.0 * blur * hstep, uv.y - 4.0 * blur * vstep), 0) * 0.0162162162;
-    outcolor += texelFetch(strokeColor, ivec2(uv.x - 3.0 * blur * hstep, uv.y - 3.0 * blur * vstep), 0) * 0.0540540541;
-    outcolor += texelFetch(strokeColor, ivec2(uv.x - 2.0 * blur * hstep, uv.y - 2.0 * blur * vstep), 0) * 0.1216216216;
-    outcolor += texelFetch(strokeColor, ivec2(uv.x - 1.0 * blur * hstep, uv.y - 1.0 * blur * vstep), 0) * 0.1945945946;
-
-    outcolor += texelFetch(strokeColor, ivec2(uv.x, uv.y), 0) * 0.2270270270;
-
-    outcolor += texelFetch(strokeColor, ivec2(uv.x + 1.0 * blur * hstep, uv.y + 1.0 * blur * vstep), 0) * 0.1945945946;
-    outcolor += texelFetch(strokeColor, ivec2(uv.x + 2.0 * blur * hstep, uv.y + 2.0 * blur * vstep), 0) * 0.1216216216;
-    outcolor += texelFetch(strokeColor, ivec2(uv.x + 3.0 * blur * hstep, uv.y + 3.0 * blur * vstep), 0) * 0.0540540541;
-    outcolor += texelFetch(strokeColor, ivec2(uv.x + 4.0 * blur * hstep, uv.y + 4.0 * blur * vstep), 0) * 0.0162162162;
+	/* apply blurring, using a 9-tap filter with predefined gaussian weights */
+    outcolor += texelFetch(strokeColor, ivec2(uv.x - 1.0 * blurx, uv.y + 1.0 * blury), 0) * 0.0947416;
+    outcolor += texelFetch(strokeColor, ivec2(uv.x - 0.0 * blurx, uv.y + 1.0 * blury), 0) * 0.118318;
+    outcolor += texelFetch(strokeColor, ivec2(uv.x + 1.0 * blurx, uv.y + 1.0 * blury), 0) * 0.0947416;
+    outcolor += texelFetch(strokeColor, ivec2(uv.x - 1.0 * blurx, uv.y + 0.0 * blury), 0) * 0.118318;
+
+    outcolor += texelFetch(strokeColor, ivec2(uv.x, uv.y), 0) * 0.147761;
+
+    outcolor += texelFetch(strokeColor, ivec2(uv.x + 1.0 * blurx, uv.y + 0.0 * blury), 0) * 0.118318;
+    outcolor += texelFetch(strokeColor, ivec2(uv.x - 1.0 * blurx, uv.y - 1.0 * blury), 0) * 0.0947416;
+    outcolor += texelFetch(strokeColor, ivec2(uv.x + 0.0 * blurx, uv.y - 1.0 * blury), 0) * 0.118318;
+    outcolor += texelFetch(strokeColor, ivec2(uv.x + 1.0 * blurx, uv.y - 1.0 * blury), 0) * 0.0947416;
 
 	FragColor = outcolor;
 }




More information about the Bf-blender-cvs mailing list