[gtk/ngl-clip-classification] gsk: Use clip defines in shaders
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/ngl-clip-classification] gsk: Use clip defines in shaders
- Date: Sun, 7 Mar 2021 23:52:33 +0000 (UTC)
commit 1f65945dd125c018b465883050ba601c0df8abaa
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 | 39 ++++++++++++++++++++++++++++++++++---
1 file changed, 36 insertions(+), 3 deletions(-)
---
diff --git a/gsk/resources/glsl/preamble.fs.glsl b/gsk/resources/glsl/preamble.fs.glsl
index c2cd1cdc29..ae0a11140c 100644
--- a/gsk/resources/glsl/preamble.fs.glsl
+++ b/gsk/resources/glsl/preamble.fs.glsl
@@ -75,6 +75,17 @@ 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)
+{
+ vec4 bounds = vec4(r.xy, r.xy + r.zw);
+ if (p.x < bounds.x || p.y < bounds.y ||
+ p.x >= bounds.z || p.y >= bounds.w)
+ return 0.0;
+
+ return 1.0;
+}
+
vec4 GskTexture(sampler2D sampler, vec2 texCoords) {
#if defined(GSK_GLES) || defined(GSK_LEGACY)
return texture2D(sampler, texCoords);
@@ -101,14 +112,36 @@ vec2 gsk_get_frag_coord() {
}
void gskSetOutputColor(vec4 color) {
- vec2 f = gsk_get_frag_coord();
-
// We do *NOT* transform the clip rect here since we already
// need to do that on the CPU.
+#ifdef NO_CLIP
+
+#if defined(GSK_GLES) || defined(GSK_LEGACY)
+ gl_FragColor = color;
+#else
+ outputColor = color;
+#endif
+
+#else
+
+vec2 f = gsk_get_frag_coord();
+
+#ifdef 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]