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;
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to