[gtk/ngl-clip-classification] gsk: Use clip defines in shaders



commit e29ea7c6da6e0b29719cdf111685366f02796e7a
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Mar 7 17:51:42 2021 -0500

    gsk: Use clip defines in shaders
    
    Use the NO_CLIP and RECT_CLIP defines to make
    simpler shaders for these cases.
    
    Note: This does not work yet.

 gsk/resources/glsl/preamble.fs.glsl | 34 +++++++++++++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)
---
diff --git a/gsk/resources/glsl/preamble.fs.glsl b/gsk/resources/glsl/preamble.fs.glsl
index c2cd1cdc29..5f30ba2d59 100644
--- a/gsk/resources/glsl/preamble.fs.glsl
+++ b/gsk/resources/glsl/preamble.fs.glsl
@@ -75,6 +75,16 @@ gsk_rounded_rect_coverage (GskRoundedRect r, vec2 p)
   return 1.0 - dot(vec4(is_out), corner_coverages);
 }
 
+float
+gsk_rect_coverage (vec4 r, vec2 p)
+{
+  if (p.x < r.x || p.y < r.y ||
+      p.x >= r.z || p.y >= r.w)
+    return 0.0;
+
+  return 1.0;
+}
+
 vec4 GskTexture(sampler2D sampler, vec2 texCoords) {
 #if defined(GSK_GLES) || defined(GSK_LEGACY)
   return texture2D(sampler, texCoords);
@@ -105,10 +115,32 @@ void gskSetOutputColor(vec4 color) {
 
   // We do *NOT* transform the clip rect here since we already
   // need to do that on the CPU.
+#if defined(NO_CLIP)
+
+#if defined(GSK_GLES) || defined(GSK_LEGACY)
+  gl_FragColor = color;
+#else
+  outputColor = color;
+#endif
+
+#else
+
+#if defined(RECT_CLIP)
+
+#if defined(GSK_GLES) || defined(GSK_LEGACY)
+  gl_FragColor = color * gsk_rect_coverage(u_clip_rect[0], f);
+#else
+  outputColor = color * gsk_rect_coverage(u_clip_rect[0], f);
+#endif
+
+#else
+
 #if defined(GSK_GLES) || defined(GSK_LEGACY)
   gl_FragColor = color * gsk_rounded_rect_coverage(gsk_create_rect(u_clip_rect), f);
 #else
   outputColor = color * gsk_rounded_rect_coverage(gsk_create_rect(u_clip_rect), f);
 #endif
-  /*outputColor = color;*/
+
+#endif
+#endif
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]