[gtk/ngl-vertex-attributes] fixups



commit 17fd6665e49ada6724290bf1eceb3068019389a7
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Mar 12 08:45:45 2021 -0500

    fixups

 gsk/ngl/gsknglrenderjob.c       |  6 ++++--
 gsk/ngl/resources/coloring.glsl | 15 +++++++++++----
 2 files changed, 15 insertions(+), 6 deletions(-)
---
diff --git a/gsk/ngl/gsknglrenderjob.c b/gsk/ngl/gsknglrenderjob.c
index eff963fa64..8f67575564 100644
--- a/gsk/ngl/gsknglrenderjob.c
+++ b/gsk/ngl/gsknglrenderjob.c
@@ -2710,9 +2710,11 @@ gsk_ngl_render_job_visit_text_node (GskNglRenderJob     *job,
 
   program = CHOOSE_PROGRAM (job, coloring);
 
-  /* If the font has color glyphs, we don't need to recolor anything */
+  /* If the font has color glyphs, we don't need to recolor anything.
+   * We tell the shader by setting the color to vec4(-1).
+   */
   if (!force_color && gsk_text_node_has_color_glyphs (node))
-    c = (GdkRGBA) { 0.f, 0.f, 0.f, 0.f };
+    c = (GdkRGBA) { -1.f, -1.f, -1.f, -1.f };
   else
     c = *color;
 
diff --git a/gsk/ngl/resources/coloring.glsl b/gsk/ngl/resources/coloring.glsl
index 31156f6705..d7d2aed7d6 100644
--- a/gsk/ngl/resources/coloring.glsl
+++ b/gsk/ngl/resources/coloring.glsl
@@ -1,25 +1,32 @@
 // VERTEX_SHADER:
 _OUT_ vec4 final_color;
-_OUT_ vec4 color;
+flat _OUT_ int use_color;
 
 void main() {
   gl_Position = u_projection * u_modelview * vec4(aPosition, 0.0, 1.0);
 
   vUv = vec2(aUv.x, aUv.y);
 
-  color = aColor;
+  // We use this shader for both plain glyphs (used as mask)
+  // and color glpyhs (used as source). The renderer sets
+  // aColor to vec4(-1) for color glyhs.
+  if (distance(aColor, vec4(-1)) < 0.001)
+    use_color = 0;
+  else
+    use_color = 1;
+
   final_color = gsk_premultiply(aColor) * u_alpha;
 }
 
 // FRAGMENT_SHADER:
 
 _IN_ vec4 final_color;
-_IN_ vec4 color;
+flat _IN_ int use_color;
 
 void main() {
   vec4 diffuse = GskTexture(u_source, vUv);
 
-  if (color != vec4(0.0))
+  if (use_color == 1)
     gskSetOutputColor(final_color * diffuse.a);
   else
     gskSetOutputColor(diffuse * u_alpha);


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