[gtk/ngl-vertex-attributes] fixups
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/ngl-vertex-attributes] fixups
- Date: Fri, 12 Mar 2021 13:46:02 +0000 (UTC)
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]