[Bf-blender-cvs] [1955607d69b] greasepencil-object: Fix pixel scale in VFX pixel
Antonio Vazquez
noreply at git.blender.org
Sat Dec 9 17:10:14 CET 2017
Commit: 1955607d69b0b35437708cab2ebef0d546678414
Author: Antonio Vazquez
Date: Sat Dec 9 16:34:34 2017 +0100
Branches: greasepencil-object
https://developer.blender.org/rB1955607d69b0b35437708cab2ebef0d546678414
Fix pixel scale in VFX pixel
===================================================================
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_pixel_frag.glsl
===================================================================
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h
index fba33875ac6..b40562c5f57 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -79,6 +79,7 @@ typedef struct GPencilVFXSwirl {
} GPencilVFXSwirl;
typedef struct GPencilVFXPixel {
+ float loc[3];
float size[2];
float rgba[4];
int lines;
diff --git a/source/blender/draw/engines/gpencil/gpencil_vfx.c b/source/blender/draw/engines/gpencil/gpencil_vfx.c
index c02ff8d5b8b..bc1e20f7a69 100644
--- a/source/blender/draw/engines/gpencil/gpencil_vfx.c
+++ b/source/blender/draw/engines/gpencil/gpencil_vfx.c
@@ -253,7 +253,7 @@ static void DRW_gpencil_vfx_blur(
/* Pixelate VFX */
static void DRW_gpencil_vfx_pixel(
ModifierData *md, int ob_idx, GPENCIL_e_data *e_data, GPENCIL_Data *vedata,
- Object *UNUSED(ob), tGPencilObjectCache *cache)
+ Object *ob, tGPencilObjectCache *cache)
{
if (md == NULL) {
return;
@@ -264,6 +264,8 @@ static void DRW_gpencil_vfx_pixel(
GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
GPENCIL_PassList *psl = ((GPENCIL_Data *)vedata)->psl;
DRWShadingGroup *vfx_shgrp;
+ bGPdata *gpd = (bGPdata *)ob->data;
+
stl->vfx[ob_idx].vfx_pixel.size[0] = mmd->size[0];
stl->vfx[ob_idx].vfx_pixel.size[1] = mmd->size[1];
copy_v4_v4(stl->vfx[ob_idx].vfx_pixel.rgba, mmd->rgba);
@@ -279,6 +281,12 @@ static void DRW_gpencil_vfx_pixel(
DRW_shgroup_uniform_vec4(vfx_shgrp, "color", &stl->vfx[ob_idx].vfx_pixel.rgba[0], 1);
DRW_shgroup_uniform_int(vfx_shgrp, "uselines", &stl->vfx[ob_idx].vfx_pixel.lines, 1);
+ copy_v3_v3(stl->vfx[ob_idx].vfx_pixel.loc, &ob->loc[0]);
+ DRW_shgroup_uniform_vec3(vfx_shgrp, "loc", stl->vfx[ob_idx].vfx_pixel.loc, 1);
+ DRW_shgroup_uniform_float(vfx_shgrp, "pixsize", DRW_viewport_pixelsize_get(), 1);
+ DRW_shgroup_uniform_float(vfx_shgrp, "pixelsize", &U.pixelsize, 1);
+ DRW_shgroup_uniform_int(vfx_shgrp, "pixfactor", &gpd->pixfactor, 1);
+
/* set first effect sh */
if (cache->init_vfx_pixel_sh == NULL) {
cache->init_vfx_pixel_sh = vfx_shgrp;
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_pixel_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_pixel_frag.glsl
index d455b7e56e5..775106b95c4 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_pixel_frag.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_pixel_frag.glsl
@@ -1,4 +1,5 @@
-out vec4 FragColor;
+uniform mat4 ProjectionMatrix;
+uniform mat4 ViewMatrix;
uniform sampler2D strokeColor;
uniform sampler2D strokeDepth;
@@ -7,13 +8,25 @@ uniform vec2 size;
uniform vec4 color;
uniform int uselines;
+uniform vec3 loc;
+uniform float pixsize; /* rv3d->pixsize */
+uniform float pixelsize; /* U.pixelsize */
+uniform int pixfactor;
+
+out vec4 FragColor;
+
+float defaultpixsize = pixsize * pixelsize * float(pixfactor);
+
/* This pixelation shader is a modified version of original Geeks3d.com code */
void main()
{
vec2 uv = vec2(gl_FragCoord.xy);
- float dx = size[0];
- float dy = size[1];
+ float dx = (ProjectionMatrix[3][3] == 0.0) ? (size[0] / (loc.z * defaultpixsize)) : (size[0] / defaultpixsize);
+ float dy = (ProjectionMatrix[3][3] == 0.0) ? (size[1] / (loc.z * defaultpixsize)) : (size[1] / defaultpixsize);
+ dx = max(dx, 1);
+ dy = max(dy, 1);
+
vec2 coord = vec2(dx * floor(uv.x / dx), dy * floor(uv.y / dy));
float stroke_depth = texelFetch(strokeDepth, ivec2(coord), 0).r;
More information about the Bf-blender-cvs
mailing list