[Bf-blender-cvs] [532b27dede1] temp-gpencil-masking: Add new shader for new pass
Antonio Vazquez
noreply at git.blender.org
Tue Apr 20 17:29:01 CEST 2021
Commit: 532b27dede10856558776e12b196ed4f3562d756
Author: Antonio Vazquez
Date: Tue Apr 20 17:28:56 2021 +0200
Branches: temp-gpencil-masking
https://developer.blender.org/rB532b27dede10856558776e12b196ed4f3562d756
Add new shader for new pass
===================================================================
M source/blender/draw/CMakeLists.txt
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.c
A source/blender/draw/engines/gpencil/shaders/gpencil_mask_intersect_frag.glsl
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 196b46953c4..5836983dda8 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -335,6 +335,7 @@ data_to_c_simple(engines/gpencil/shaders/gpencil_antialiasing_vert.glsl SRC)
data_to_c_simple(engines/gpencil/shaders/gpencil_common_lib.glsl SRC)
data_to_c_simple(engines/gpencil/shaders/gpencil_layer_blend_frag.glsl SRC)
data_to_c_simple(engines/gpencil/shaders/gpencil_mask_invert_frag.glsl SRC)
+data_to_c_simple(engines/gpencil/shaders/gpencil_mask_intersect_frag.glsl SRC)
data_to_c_simple(engines/gpencil/shaders/gpencil_depth_merge_frag.glsl SRC)
data_to_c_simple(engines/gpencil/shaders/gpencil_depth_merge_vert.glsl SRC)
data_to_c_simple(engines/gpencil/shaders/gpencil_vfx_frag.glsl SRC)
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index ccb51ce0706..6a5a728b6fb 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -309,11 +309,10 @@ void GPENCIL_cache_init(void *ved)
DRW_shgroup_call_procedural_triangles(grp, NULL, 1);
}
{
- // TODO: Fix pass creation
DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_LOGIC_INVERT;
DRW_PASS_CREATE(psl->mask_intersect_ps, state);
- GPUShader *sh = GPENCIL_shader_mask_invert_get();
+ GPUShader *sh = GPENCIL_shader_mask_intersect_get();
grp = DRW_shgroup_create(sh, psl->mask_intersect_ps);
DRW_shgroup_call_procedural_triangles(grp, NULL, 1);
}
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h
index 5404db31d7a..2bc687397a1 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -415,6 +415,7 @@ struct GPUShader *GPENCIL_shader_antialiasing(int stage);
struct GPUShader *GPENCIL_shader_geometry_get(void);
struct GPUShader *GPENCIL_shader_layer_blend_get(void);
struct GPUShader *GPENCIL_shader_mask_invert_get(void);
+struct GPUShader *GPENCIL_shader_mask_intersect_get(void);
struct GPUShader *GPENCIL_shader_depth_merge_get(void);
struct GPUShader *GPENCIL_shader_fx_blur_get(void);
struct GPUShader *GPENCIL_shader_fx_colorize_get(void);
diff --git a/source/blender/draw/engines/gpencil/gpencil_shader.c b/source/blender/draw/engines/gpencil/gpencil_shader.c
index 6284e0a648c..2d8f7b11c6b 100644
--- a/source/blender/draw/engines/gpencil/gpencil_shader.c
+++ b/source/blender/draw/engines/gpencil/gpencil_shader.c
@@ -30,6 +30,7 @@ extern char datatoc_gpencil_antialiasing_frag_glsl[];
extern char datatoc_gpencil_antialiasing_vert_glsl[];
extern char datatoc_gpencil_layer_blend_frag_glsl[];
extern char datatoc_gpencil_mask_invert_frag_glsl[];
+extern char datatoc_gpencil_mask_intersect_frag_glsl[];
extern char datatoc_gpencil_depth_merge_frag_glsl[];
extern char datatoc_gpencil_depth_merge_vert_glsl[];
extern char datatoc_gpencil_vfx_frag_glsl[];
@@ -52,6 +53,8 @@ static struct {
GPUShader *depth_merge_sh;
/* Invert the content of the mask buffer. */
GPUShader *mask_invert_sh;
+ /* Intersect the content of the mask buffer. */
+ GPUShader *mask_intersect_sh;
/* Effects. */
GPUShader *fx_composite_sh;
GPUShader *fx_colorize_sh;
@@ -208,6 +211,15 @@ GPUShader *GPENCIL_shader_mask_invert_get(void)
return g_shaders.mask_invert_sh;
}
+GPUShader *GPENCIL_shader_mask_intersect_get(void)
+{
+ if (!g_shaders.mask_intersect_sh) {
+ g_shaders.mask_intersect_sh = DRW_shader_create_fullscreen(
+ datatoc_gpencil_mask_intersect_frag_glsl, NULL);
+ }
+ return g_shaders.mask_intersect_sh;
+}
+
GPUShader *GPENCIL_shader_depth_merge_get(void)
{
if (!g_shaders.depth_merge_sh) {
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_mask_intersect_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_mask_intersect_frag.glsl
new file mode 100644
index 00000000000..a743cf72b10
--- /dev/null
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_mask_intersect_frag.glsl
@@ -0,0 +1,12 @@
+uniform sampler2D maskBuf;
+in vec4 uvcoordsvar;
+
+/* Blend mode is multiply. */
+layout(location = 0) out vec4 fragColor;
+layout(location = 1) out vec4 fragRevealage;
+
+void main()
+{
+ float mask = textureLod(maskBuf, uvcoordsvar.xy, 0).r;
+ fragRevealage = fragColor = vec4(1.0 - mask);
+}
More information about the Bf-blender-cvs
mailing list