[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