[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